Android / Java: макет автоматического перевода строки - PullRequest
0 голосов
/ 29 января 2019

У меня есть активность в моем приложении для 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 голосов
/ 29 января 2019

Автоматическая упаковка представлений является типичным случаем использования FlexboxLayout от Google.В вашем случае это может быть что-то вроде:

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

Подробнее в Создание гибких макетов с FlexboxLayout

0 голосов
/ 29 января 2019
<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...