Проблема переноса текста в LinearLayout при наличии двух кнопок одинакового размера и растянутой в центре - PullRequest
2 голосов
/ 20 августа 2010

Похоже, что есть много вопросов о центрировании, одинакового размера и т. Д., Но до сих пор я не нашел точно мой случай, поэтому я осмелюсь спросить:)

Что мне нужно, так это расположение трех кнопок:

[ previous ][*select*] [  next  ]

, где [предыдущий] и [следующий] кнопки имеют одинаковый размер (т. Е. В этом случае, размер [предыдущий] Кнопка (она больше), а кнопка [* select *] должна растягиваться, чтобы занимать всю доступную ширину.

Следуя подсказкам создания двух кнопок в LinearLayout одинакового размера, я создал следующий xml-файл:

<LinearLayout
    android:id="@+id/button_bar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal" >

    <Button
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:text="Previous" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="Select" />

    <Button
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:text="Next" />

</LinearLayout>

Это почти работает :) За исключением одного: вместо того, чтобы сделать кнопку Next , соответствующую размеру кнопки Previous , android делает кнопку Previous размером Next :) И из-за этого текст «Предыдущий» оборачивается в две строки, например

Previ
ous

Не знаю, если это ошибка или нет, но можете ли вы посоветовать мне обходной путь или какой-то другой способ достижения желаемого макета?

Спасибо!

Ответы [ 4 ]

1 голос
/ 20 августа 2010

Если вы включаете «android: layout_weight», вы должны указать либо «android: layout_width», либо «android: layout_height» как «fill_parent»

измените свой код следующим образом

<LinearLayout
android:id="@+id/button_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    android:text="Previous" />

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1.5"
    android:text="Select" />

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    android:text="Next" />

1 голос
/ 20 августа 2010

Я бы предложил использовать RelativeLayout

<RelativeLayout
    android:id="@+id/buttons"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"

    android:clickable="false">

    <Button
    android:id="@+id/previous"

    android:layout_width="30dp"
    android:layout_height="wrap_content"
    android:text="Previous" 

    android:layout_alignParentLeft="true"/>

    <Button
    android:id="@+id/next"

    android:layout_width="30dp"
    android:layout_height="wrap_content"
    android:text="Next" 

    android:layout_alignParentRight="true"/>

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Select"

    android:layout_toRightOf="@id/previous"
    android:layout_toLeftOf="@id/next" />
</RelativeLayout>

Это должно работать.

0 голосов
/ 20 августа 2010

Я не уверен, что вы можете сопоставить размер с каким-либо другим, кроме того, сделав это в коде. Самым простым решением, вероятно, является корректировка предыдущей и следующей ширины кнопок в единицах dp / sp, пока они не будут хорошо выглядеть, и кнопка выбора будет единственной с атрибутом layout_weight.

0 голосов
/ 20 августа 2010

В таком случае я бы выбрал TableLayout, в котором у вас есть одна строка и вес 1 для КАЖДОЙ кнопки.и атрибут stretchColumn, помещенный в столбец 1. Имеет ли это какое-либо значение?

...