Intereting Posts
Отключение выбора текста в PhoneGap Где установить Android SDK на Mac OS X? Tab не принимает полную ширину на планшетном устройстве Сообщение об ошибке Logcat – Попытка уничтожить барьер с ненулевым счетом Как создать три столбца в TableLayout Android: «Автообновление» через определенное время Волейбол не вызывает getParams для моего пользовательского запроса? Зачем вызывать setResult в BroadcastReceiver? Phonegap Кросс-домен AJAX POST Запрос не работает на Android Разъяснение документов для PendingIntent.FLAG_CANCEL_CURRENT Разрешение Описание Тип пути Android зависает, когда в OnClickListener.onClick есть исключение NullPointerException (другие задачи не могут запускаться) Горизонтальный индикатор выполнения не обновляет свой статус Android WebClient, возвращающий ресурс изображения через WebResourceResponse – не отображает изображение Android: Просмотр горизонтального списка в вертикальном представлении прокрутки?

Кнопки должны быть такими же широкими, как и самые большие

Я хочу, чтобы все Button соответствовали тексту, поэтому в Button s нет разрывов строк, но также и вся Button должна иметь такую ​​же ширину, как и самая большая.

Я достиг этого, установив в layout_width все Button layout_width WRAP_CONTENT :

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" /> ... </LinearLayout> 

Затем я ищу самую большую ценность и задаю все кнопки одинакового размера:

 @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); ViewGroup layout = (ViewGroup) findViewById(R.id.layout); int size = 0; for (int i = 0; i < layout.getChildCount(); ++i) { View child = layout.getChildAt(i); if (child.getWidth() > size) { size = child.getWidth(); } } for (int i = 0; i < layout.getChildCount(); ++i) { LayoutParams params = layout.getChildAt(i).getLayoutParams(); params.width = size; layout.getChildAt(i).setLayoutParams(params); } } 

Есть ли более чистые, более элегантные решения для этого?

Solutions Collecting From Web of "Кнопки должны быть такими же широкими, как и самые большие"

Оберните, все кнопки внутри общего родителя. Скажите, что linearlayout имеет атрибуты как wrap_content, wrap_content. Используйте атрибуты Match_Parent для вашей кнопки, теперь программно вы просто вычисляете размер самого большого текста и устанавливаете его как родительскую ширину, а также раскладываете над ним, это гарантирует, что все дочерние элементы, которые он содержит, будут эффективно изменяться.

 <LinearLayout <!--Parent--> android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <!-- Child --> <Button android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> 

Использование TableLayout и TableRow позволит столбцу (в данном случае Button ) фиксированной ширины, зависит от самого большого / самого длинного. android:shrinkColumns используется в случае, если некоторые из Buttons длиннее ширины экрана, чтобы сделать слово wrap.

Пример:

 <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:shrinkColumns="0" > <TableRow> <Button android:text="Short" /> </TableRow> <TableRow> <Button android:text="Longer text" /> </TableRow> <TableRow> <Button android:text="Middle" /> </TableRow> </TableLayout> 

Используйте MatchParent вместо WrapContent, как показано ниже.

 <Button android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:layout_width="match_parent" android:layout_height="match_parent" /> 

Надеюсь это поможет!!!