将视图移至"下一行"如果它不适合

时间:2017-01-13 11:16:30

标签: android android-layout

所以,想法就是:我有两个TextViews,首先可以扩展它想要的东西,第二个总是5个字符(时间)。问题在于,第一个TextView可以很容易地将第二个推出屏幕。

所以,我需要的是可调LinearLayout,或者某些GridLayout,如果它不适合父母,它会在某种第二行上移动第二TextView

例如,您可以在Viber和WhatsApp中查看消息气泡。谢谢你的任何建议。

更新1

这是我现在拥有的XML(仅限消息部分)

              <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/messageBox"
                android:layout_gravity="center_vertical"
                android:gravity="center_vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="14sp"
                    android:layout_gravity="center_vertical"
                    android:gravity="center_vertical"
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
                    android:textColor="@color/black"
                    android:text='@{mess.message}'/>

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center_vertical|end"
                    android:gravity="center_vertical|end"
                    android:paddingLeft="8dp"
                    android:textSize="12sp"
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
                    android:text='@{Utils.parseMillsToHoursAndMins(mess.date)}'/>
            </LinearLayout>

更新2

所以我将layout_weight添加到第一个TextView,这有助于我的第一个问题,但现在我有了新问题。这两个TextView位于LinearLayout中,位于另一个LinearLayout中,另一个TextView。父LinearLayout已将宽度设置为wrap_content,因此如果top TextView大于2 TextView s,则会导致子LinearLayout小于其父级,第二个TextView(从那个2)不会在父母的末尾。但是当孩子LinearLayout更大时,一切似乎都没问题。我知道它很复杂,所以这是XML

<LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minWidth="0dp"
            android:id="@+id/contentPanel"
            app:bringToFront="@{true}"
            android:orientation="vertical"
            android:background="@{(mess.isMine?@drawable/chat_bubble_right:@drawable/chat_bubble_left)}">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text='@{!mess.authorRole.equals("Client")?(mess.authorRole + " - " + mess.author):mess.author}'
                android:textColor='@{mess.authorRole.equals("Lawyer")?@color/colorPrimary:mess.authorRole.equals("Admin")?@color/red:@color/green}'
                android:textSize="12sp"
                android:id="@+id/author"
                android:fontFamily="sans-serif-medium"
                android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"/>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/messageBox">
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:textSize="14sp"
                    android:layout_gravity="center_vertical"
                    android:gravity="center_vertical"
                    android:layout_weight="0.7"
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
                    android:textColor="@color/black"
                    android:text='@{mess.message}'/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:paddingLeft="8dp"
                    android:textSize="12sp"
                    android:gravity="bottom|end"
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
                    app:checkFit="@{false}"
                    android:text='@{Utils.parseMillsToHoursAndMins(mess.date)}'/>
            </LinearLayout>
        </LinearLayout>

2 个答案:

答案 0 :(得分:0)

如果您在linearlayout中的文字视图可以添加weightSum方法

答案 1 :(得分:0)

我不确定这会对您有所帮助,但是: 使用:https://github.com/ApmeM/android-flowlayout

<org.apmem.tools.layouts.FlowLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

</org.apmem.tools.layouts.FlowLayout>

在FlowLayout内部,你可以放置你的视图,如果不合适,它会自动移动到下一行。