Я хочу отображать три кнопки в середине экрана, и все три кнопки имеют одинаковую ширину, хотя они будут иметь текстовые метки разной длины.
Простое добавление трех кнопок с текстовыми ярлыками разной длины создает кнопки разной ширины.
<?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>
по умолчанию ширина кнопки обертывает содержимое:
-
Установка 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 кнопка заполняет ширину экрана:
-
Установка различных значений для 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>
весовая сумма 5 маленьких экранов:
весовая сумма 5 больших экранов:
-
Я также много проработал с TableLayout, но не получил ничего лучше, чем просто использовать LinearLayout.
GridView очень неудобен для использования, и я еще не пробовал его.
Итак, как создать кнопки с одинаковой шириной, желательно, чтобы они были настолько широкими, насколько это необходимо, чтобы соответствовать содержимому кнопки с самой длинной меткой?
Любые советы приветствуются.
(Я искал и задавал этот вопрос и отвечал много раз, но ни один из ответов, которые я нашел, не разрешил то, что я пытаюсь достичь.)