Горизонтальное расположение Android с динамически расширяющимся TextView справа - PullRequest
1 голос
/ 15 февраля 2012

Мне нужно создать горизонтальный макет Android с вертикальным LinearLayout слева и TextView справа, как показано ниже:

¦==========================¦
¦      A1     ¦            ¦
¦             ¦     BB     ¦
¦      A2     ¦            ¦
¦==========================¦

Вертикаль LinearLayout слева содержит два элемента TextView, а секции A и B занимают всю ширину экрана. Все элементы TextView содержат динамически назначаемое текстовое содержимое.

Я хочу, чтобы ширина TextView B определялась его содержимым, чтобы он расширялся или сжимался, чтобы показать весь его контент (который не может быть перенесен и должен отображаться в одной строке), а ширина LinearLayout A слева должен определяться шириной TextView B, как показано ниже:

TextView B расширяется:

¦==========================¦
¦     A1    ¦              ¦
¦           ¦     BBB      ¦
¦     A2    ¦              ¦
¦==========================¦

TextView B сжимается:

¦==========================¦
¦      A1       ¦          ¦
¦               ¦    B     ¦
¦      A2       ¦          ¦
¦==========================¦

Моя идея состояла в том, чтобы использовать LinearLayout вот так:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:orientation="horizontal" >

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

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

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

    </LinearLayout>

    <TextView
        android:id="@+id/B"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:singleLine="true" />

</LinearLayout>

, но с указанным выше макетом, если содержимое TextView A1 достаточно длинное, оно занимает всю ширину экрана и TextView B исчезает.

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 15 февраля 2012

Вы должны создать правильное текстовое представление, чтобы обернуть содержимое, и чтобы левое линейное отображение использовало атрибут веса как

android:layout_weight="1.0"

Это скажет linearlayout занять оставшееся пространство. Но если текст слишком длинный, либо уменьшите размер текста, либо уменьшите размер.

1 голос
/ 15 февраля 2012

Для этого предлагаю использовать RelativeLayout

Я разместил код в pastebin, который показывает пример http://pastebin.com/Ttc42C69

Вы можете улучшить это, используя layout_margin.

Польза от использования ...

android:layout_alignRight="@id/aonetext"
android:layout_alignLeft="@id/aonetext"

... в atwotext заключается в том, что если вы хотите отрегулировать поля a1 и a2, вам просто нужно сделать это в a1, и это повлияет на оба

// Edit

Еще один положительный эффект: вы экономите на уровне иерархии XML.

0 голосов
/ 15 февраля 2012

Почему бы вам не попробовать установить ширину TextView A с помощью getSuggestedMinimumWidth ()?

Я хочу сказать:

a.setWidth(a.getSuggestedMinimumWidth());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...