Макет Android с использованием layout_weight, layout_width и maxWidth - PullRequest
5 голосов
/ 10 февраля 2011

Я пытаюсь получить строку текста, которая будет выглядеть примерно так:

foofoofoo - barbarbar

но я хочу, чтобы он эллипс foo и bar, если он не помещается на одной строке. то есть я пытаюсь сократить их.

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView android:id="@+id/text_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:maxWidth="0dip"
        android:layout_weight="1"
        android:textColor="#ffffff"
        android:singleLine="true"
        android:ellipsize="true"
        android:text="foofoofoofoo" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#ffffff"
        android:text=" - " />
    <TextView
        android:id="@+id/text_2"
        android:layout_width="wrap_content"                         
        android:layout_height="wrap_content"
        android:maxWidth="0dip"
        android:layout_weight="1"
        android:textColor="#ffffff"
        android:singleLine="true"
        android:ellipsize="true"
        android:text="barbarbarbar" />
</LinearLayout>

Потерпи меня, это работает частично.

Установка TextView s layout_width на 0dip и layout_weight на 1 означает, что они будут занимать 50% доступного пространства каждый.

Установка singleLine в true и ellipsize в true означает, что они будут выглядеть как foofoo ... , если текст больше контейнера.

Поэтому мой результат (если текст длиннее) должен быть

foofoo .. - barbar ..

Что это! Так что это работает.

Теперь я пытаюсь исправить случай , если первый TextView (id: text_1) имеет текст, который меньше 50%, заданных layout_width="0dip" и layout_weight="1" I хочу это wrap_content. В противном случае это выглядит так:

foo пробел - barbar ..

а я хочу

foo - barbarbar

Вот почему я изменил layout_width="wrap_content" и добавил android:maxWidth="0dip", но это не работает! Кажется, что я игнорирую, говоря wrap_content, и все еще высказываю 50%!

Я читал, что вам нужно добавить android:adjustViewBounds="true" для maxWidth, чтобы это работало, но это никак не отразилось.

Ответы [ 2 ]

10 голосов
/ 09 марта 2011

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

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:shrinkColumns="0,2"
    android:stretchColumns="0,2">
    <TableRow>
        <TextView android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:ellipsize="end"
            android:text="foofoofoo"/>
        <TextView android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="-"
            android:gravity="center_horizontal"/>
        <TextView android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:ellipsize="end"
            android:text="barbarbarbarbarbarbarbarbarbarbarbar"/>
    </TableRow>
</TableLayout>
2 голосов
/ 10 февраля 2011

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

Во-первых, вы хотите, чтобы представления разделяли пространство одинаково, когда объем текста в представлении одинаков.

Во-вторых, вы хотите, чтобы представления НЕ разделяли пространство одинаково, когда в другом представлении меньше текста.

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

...