Я хочу сделать простой макет чата с выравниванием часа каждого сообщения в правом нижнем углу текста (как в Whatsapp). Ширина каждого сообщения изменяется динамически, поэтому я должен установить layout_width в wrap_content. В этом случае гравитация или layout_gravity не влияют на час, но я не знаю, как его изменить. Вот код txtMessage - это сообщение, а ora - это час, когда я хочу выровнять нижний правый под сообщением. Спасибо

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
    android:id="@+id/content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/contentWithBackground"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <TextView
            android:id="@+id/risponditore"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:textSize="10sp"
            android:textStyle="bold"
            android:text=""
            android:visibility="gone"
            android:textColor="@color/bluScuro"/>
        <TextView
            android:id="@+id/txtMessage"
            android:layout_below="@+id/risponditore"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@android:color/black"
            android:maxWidth="245dp"
            android:textSize="12sp"
            android:layout_gravity="left"/>
        <RelativeLayout
            android:id="@+id/contenitoreOra"
            android:layout_below="@+id/txtMessage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="right">

            <TextView
                android:id="@+id/ora"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="10sp"
                android:textColor="@color/grigioScuro"
                android:layout_gravity="bottom|right"/>
            </RelativeLayout>
    </RelativeLayout>
  </LinearLayout>

</RelativeLayout>

Отредактированный :

Я хочу иметь такой макет:

Text message Text message Text message Text message
Text message Text message Text message Text message
Text message Text message Text message Text message
                                               hour
0
Iva Pesa 11 Сен 2017 в 11:02

3 ответа

Лучший ответ

В конце я получил решение, используя TableLayout с двумя строками.
Первая строка содержит сообщение, а вторая строка содержит час.
Сообщение выровнено по левому краю и по часовой стрелке.
Ниже приведен код.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
    android:id="@+id/content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/contentWithBackground"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/risponditore"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:textSize="10sp"
            android:textStyle="bold"
            android:text=""
            android:visibility="gone"
            android:textColor="@color/bluScuro"/>

        <TableLayout
            android:id="@+id/tabellaMessaggioOra"
            android:layout_below="@+id/risponditore"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <TableRow
                android:id="@+id/rigaMessaggio"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
                <TextView
                    android:id="@+id/txtMessage"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@android:color/black"
                    android:maxWidth="245dp"
                    android:textSize="12sp"
                    android:layout_gravity="left"/>
            </TableRow>
            <TableRow
                android:id="@+id/rigaOra"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
                <TextView
                    android:id="@+id/ora"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="10sp"
                    android:textColor="@color/grigioScuro"
                    android:layout_gravity="right"/>

            </TableRow>
        </TableLayout>

    </RelativeLayout>
</LinearLayout>
</RelativeLayout>  
1
Iva Pesa 12 Сен 2017 в 17:10

В этом случае вы можете использовать LinearLayout, он будет работать, если вы добавите гравитацию в LinearLayout. Игнорируйте это, если вы хотите строго RelativeLayout.

<LinearLayout
            android:id="@+id/contenitoreOra"
            android:layout_below="@+id/txtMessage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="right">

            <TextView
                android:id="@+id/ora"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="10sp"
                android:textColor="@color/grigioScuro"
                android:layout_gravity="bottom|right"/>
 </LinearLayout>
0
Rishabh Dugar 11 Сен 2017 в 09:24

Вы можете использовать android: layout_toRightOf Логика .

Позиционирует левый край этого вида справа от данного идентификатора якорного вида. Приспосабливает левое поле этого вида и правое поле привязки.

< Сильный > Пример

<Button
        android:id="@+id/btnButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Intellij"/>

    <Button
        android:id="@+id/btnButton2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Amiyo"
        android:layout_toRightOf="@+id/btnButton1"/>

< Сильный > FYQ

Используйте android:gravity="bottom|right"

<TextView
                android:id="@+id/ora"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="10sp"
                android:text="Text message"
                android:gravity="bottom|right"/>
0
IntelliJ Amiya 11 Сен 2017 в 08:41