Android / Java:布局自动换行

时间:2019-01-29 09:26:53

标签: java android layout

我的android应用中有一个活动,必须显示键值对列表。键和值都是长度不均匀的字符串资源。 键应左对齐,值应右对齐。如果键和值适合屏幕上的一行,则应将它们相邻显示,而换行符则应将键和值分开。

我为列表项创建了两种布局,一种带有换行符,一种没有布局,如以下屏幕截图所示:

key-value pair one line key value pair with linebreak

如何在活动的ListView中自动显示正确的列表项?

编辑:根据要求,我还添加了我的源代码(尽管我认为这不是很有用,但必须在将列表布局片段添加到ListView的部分中完成两个布局文件之间的区分。但是,在这个地方,我将不得不解决许多其他问题,例如确定字符串资源的长度,确定可用于显示布局的空间以及创建对可用空间的变化做出反应的处理程序,因此我更喜欢@bwt提出的解决方案)

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

    <TextView
        android:id="@+id/listitem_key"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        tools:text="Key"/>

    <TextView
        android:id="@+id/listitem_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        tools:text="Value"/>
</RelativeLayout>

并带有换行符

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

    <TextView
        android:id="@+id/listitem_key"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        tools:text="Key with a very long text constant"/>

    <TextView
        android:id="@+id/listitem_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/listitem_key"
        android:layout_alignParentEnd="true"
        tools:text="Value with a very long text constant"/>
</RelativeLayout>

2 个答案:

答案 0 :(得分:2)

自动包装视图是Google FlexboxLayout的典型用例。在您的情况下,可能类似于:

<com.google.android.flexbox.FlexboxLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:alignContent="flex_start"
    app:flexWrap="wrap">

    <TextView
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <!-- right justified (using the remaining space) -->
    <TextView
        android:id="@+id/textview2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="end"
        app:layout_flexGrow="1" />

</com.google.android.flexbox.FlexboxLayout>

Build flexible layouts with FlexboxLayout

中的更多详细信息

答案 1 :(得分:0)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:paddingTop="10dp">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:orientation="vertical"
    android:id="@+id/text1"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="left"
    android:id="@+id/notification_message"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@id/text1"
    android:layout_toStartOf="@id/text1"/>


</RelativeLayout>