如何在RelativeLayout中右对齐TextView,其中layout_width是wrap_content,它的父布局有wrap_content到

时间:2017-09-11 08:02:06

标签: android

我想制作一个简单的聊天布局,每个消息的小时位于文本右下角(如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

3 个答案:

答案 0 :(得分:1)

最后,我使用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 :(得分:0)

您可以使用 android:layout_toRightOf 逻辑

  

将此视图的左边缘定位到给定锚点的右侧   查看ID。容纳此视图的左边距和右边距   锚视图。

示例

<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"/>

答案 2 :(得分:0)

在这种情况下,您可能希望使用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>