Как создать кнопки с одинаковой шириной?

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

Просто добавляем три кнопки с текстовыми метками разной длины создают кнопки разной ширины.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center">
    <Button
        android:id="@+id/button_1"
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:text="ABCDEF" />
    <Button
        android:id="@+id/button_2"
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:text="GHI" />
    <Button
        android:id="@+id/button_3"
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:text="JKLM" />
</LinearLayout>

ширина кнопки по умолчанию обертывает содержимое:
default button width wraps contents

-

Установка layout_weight на 1 и layout_width на 0dip на всех кнопках заставляет их растягиваться одинаково чтобы заполнить всю ширину экрана. Насколько я хочу, такие кнопки просто великоваты, особенно на больших экранах.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center">
    <Button
        android:id="@+id/button_1"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="ABCDEF" />
    <Button
        android:id="@+id/button_2"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="GHI" />
    <Button
        android:id="@+id/button_3"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="JKLM" />
</LinearLayout>

кнопки веса 1 макета заполняют ширину экрана:
layout weight 1 buttons fill screen width

-

Установка различных значений для weightSum в родительском LinearLayout может использоваться, чтобы остановить кнопки от заполнения всего экрана, но я не Не думаю, что я хочу пойти по этому пути, потому что не хочу, чтобы кнопки занимали большую часть экрана на устройствах с большим экраном. Чтобы уточнить, используя weightSum, я мог бы, например, настроить три кнопки так, чтобы они вместе занимали половину ширины экрана, что может выглядеть нормально на маленьких экранах, но на большом экране кнопки все равно будут занимать половину ширины экрана, а просто кнопки были бы намного больше, чем я хочу. Возможно, окончательным решением будет просто иметь разные файлы макета для разных экранов, но я бы предпочел не идти по этому пути.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center"
    android:weightSum="5">
    <Button
        android:id="@+id/button_1"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="ABCDEF" />
    <Button
        android:id="@+id/button_2"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="GHI" />
    <Button
        android:id="@+id/button_3"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="JKLM" />
</LinearLayout>

weight sum 5 small screen:
weight sum 5 small screen

весовая сумма 5 большой экран:
weight sum 5 large screen

-

Я также пробовал много вещей с TableLayout, но не нашел ничего лучше, чем просто использование LinearLayout.

GridView очень неудобен в использовании, и я еще не пробовал.

Итак, как создать кнопки одинаковой ширины, желательно, чтобы они были ровно настолько, насколько это необходимо, чтобы вместить содержимое кнопки с самой длинной меткой?

Любой совет приветствуется .

(Я искал и нашел, что этот вопрос задавался и отвечал много раз, но ни один из ответов, которые я нашел, не помог решить то, чего я пытаюсь достичь.)

27
задан Tim 15 October 2012 в 19:37
поделиться