Как выровнять кнопку вправо, не перекрывая TextView? - PullRequest
6 голосов
/ 27 апреля 2010

Я пытаюсь получить что-то вроде этого: http://img202.imageshack.us/img202/552/layoutoy.png. Я использую это как элемент списка (технически, как групповое представление ExpandableListView).

Вот файл XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight">

    <TextView
        android:id="@+id/list_item_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end" />

    <Button
        android:id="@+id/list_item_button"
        android:text="Click me!"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@id/list_item_text" />

</RelativeLayout>

Но это не работает. Кнопка не переносит свое содержимое, вместо этого она использует все доступное горизонтальное пространство. TextView делает оберткой своего содержимого, но я хочу, чтобы оно было обрезано, когда оно перекрывает кнопку.

Другими словами, я хочу, чтобы все кнопки были одинаковой ширины, независимо от объема текста в текстовых представлениях. Это вообще возможно?

Ответы [ 2 ]

5 голосов
/ 27 апреля 2010

Я думаю, вы должны попробовать это наоборот. Сделайте TextView слева от кнопки. Таким образом, Textview не будет перекрывать кнопку. Если вы хотите, чтобы оно было вырезано в конце строки, вы должны ограничить его одной строкой. На данный момент он просто переместит остальную часть текста на следующую строку.

Это должно сработать:

<Button
    android:id="@+id/list_item_button"
    android:text="Click me!"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"/>

<TextView
    android:id="@+id/list_item_text"
    android:text="veryveryveryveryveryveryveryveryveryverylong"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/list_item_button"
    android:ellipsize="end" />

</RelativeLayout>
4 голосов
/ 27 мая 2011

Прежде чем кто-либо попробует метод, показанный выше (с RelativeLayout), вы должны использовать LinearLayout для этого. Веса должны быть установлены правильно: элемент, который должен занимать пустое пространство, должен иметь вес 1 и ширину, равную fill_parent, элемент, который должен сохранять свой минимальный размер, должен иметь вес 0 с шириной wrap_content.

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight">
<TextView
    android:id="@+id/list_item_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight=1
    android:ellipsize="end" />

<Button
    android:id="@+id/list_item_button"
    android:text="Click me!"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight=0/>

</LinearLayout>
...