Intereting Posts
Как изменить тему приложения Android? PhoneGap – Плохая производительность по сравнению с браузером на Android Проверьте правильность службы Google Play: «К сожалению приложение перестало работать» Android обратное геокодирование getLocality возвращает часто null Как запустить консоль «telnet» в эмуляторе устройства Android Studio? Android: как преобразовать массив байтов в Bitmap? Как отключить / скрыть трехточечный индикатор (индикатор меню опций) на телефонах ICS Считать общее количество элементов списка в ListView Создание простого экземпляра ExoPlayer Токен, который идентифицирует пользователя Отменить выбор выбранного элемента в ListView Разница между onCreateView и onViewCreated in Fragment Форматирование даты и времени в зависимости от языка Как сделать плагины Hugo и AndroidDevMetrics скомпилированы только при отладке: Какой адаптер использовать для использования HashMap в ListView

Можно равномерно распределить кнопки по ширине андроида linearlayout

У меня есть линейная компоновка (ориентированная по горизонтали), содержащая 3 кнопки. Я хочу, чтобы 3 кнопки имели фиксированную ширину и равномерно распределялись по ширине линейного макета.

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

<LinearLayout android:id="@+id/LinearLayout01" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_width="fill_parent" android:gravity="center"> <Button android:id="@+id/btnOne" android:layout_width="wrap_content" android:layout_height="wrap_content" android:width="120dip"></Button> <Button android:id="@+id/btnTwo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:width="120dip"></Button> <Button android:id="@+id/btnThree" android:layout_width="wrap_content" android:layout_height="wrap_content" android:width="120dip"></Button> </LinearLayout> 

Solutions Collecting From Web of "Можно равномерно распределить кнопки по ширине андроида linearlayout"

Развернувшись на ответе fedj , если вы установите layout_width в 0dp и установите layout_weight для каждой из кнопок в 1, доступная ширина будет распределена поровну между кнопками.

Если вы не хотите, чтобы кнопки масштабировались, но отрегулируйте расстояние между кнопками (равное расстояние между всеми кнопками), вы можете использовать представления с весом = «1», которые заполнят пространство между кнопками:

  <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:background="@null" android:gravity="center_horizontal|center_vertical" android:src="@drawable/tars_active" /> <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:background="@null" android:gravity="center_horizontal|center_vertical" android:src="@drawable/videos_active" /> <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> 1  <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:background="@null" android:gravity="center_horizontal|center_vertical" android:src="@drawable/tars_active" /> <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:background="@null" android:gravity="center_horizontal|center_vertical" android:src="@drawable/videos_active" /> <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> 1  <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:background="@null" android:gravity="center_horizontal|center_vertical" android:src="@drawable/tars_active" /> <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:background="@null" android:gravity="center_horizontal|center_vertical" android:src="@drawable/videos_active" /> <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> 1  <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:background="@null" android:gravity="center_horizontal|center_vertical" android:src="@drawable/tars_active" /> <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:background="@null" android:gravity="center_horizontal|center_vertical" android:src="@drawable/videos_active" /> <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> 

Вы можете использовать его следующим образом.

 <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <Space android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Save"/> <Space android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Reset"/> <Space android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="cancel"/> <Space android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="wrap_content"/> </LinearLayout> 

Ну, если у вас ровно 3 кнопки, и если это нормально (или даже запланировано), что внешние кнопки выровнены по левой и правой стороне, вы можете попробовать RelativeLayout, который меньше накладных расходов (во многих ситуациях).

Вы можете использовать layout_alignParentBottom чтобы выровнять все кнопки с нижней частью макета. Используйте layout_alignParentLeft and Right для внешних кнопок и layout_centerHorizontal для средней кнопки.

Это будет хорошо работать при разных ориентациях и размерах экрана.

Вы можете сделать это, предоставив как View sa layout_width 0dp и layout_weight из 1 :

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:layout_width="0dp" android:text="example text" android:layout_height="wrap_content" android:layout_weight="1"/> </LinearLayout> 

Способ работы android layout_weight заключается в следующем:

  • Во-первых, он смотрит на размер, который, как правило, воспринимает View, и резервирует это пространство.
  • match_parent вторых, если макет match_parent то он разделит пространство, оставшееся в соотношении layout_weight s. Таким образом, если вы предоставили представления layout_weight="2" и layout_weight="1" , итоговое соотношение будет от 2 до 1, то есть: первый вид получит 2/3 оставшегося пространства, а другой вид 1 / 3.

Вот почему, если вы дадите layout_width размер 0dp первый шаг не имеет никакого добавленного значения, поскольку обеим представлениям не назначено какое-либо пространство. Тогда только вторая точка решает пространство, которое каждый View получает, тем самым давая View s указанное вами пространство в соответствии с соотношением!

Чтобы объяснить, почему 0dp заставляет пространство делиться одинаково, предоставив пример, который показывает обратное: приведенный ниже код приведет к чему-то другому, поскольку example text теперь имеет ширину, большую, чем 0dp потому что она имеет wrap_content вместо чего свободное пространство остается Делят менее 100%, потому что текст занимает пробел. Результатом будет то, что они получают 50% свободного места, но текст уже занял некоторое пространство, поэтому TextView будет иметь более 50% от общей площади.

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:layout_width="wrap_content" android:text="example text" android:layout_height="wrap_content" android:layout_weight="1"/> </LinearLayout> 

Вы должны взглянуть на атрибут android: layout_weight

Для равномерного распределения двух кнопок в горизонтальной линейной компоновке я использовал 3 объекта LinearLayout, чтобы действовать как пробелы, которые будут автоматически изменяться. Я позиционировал эти объекты LinearLayout следующим образом:

[] Button1 [] Button2 []

([] Представляет объект LinearLayout, используемый для интервала)

Затем я устанавливаю каждый из этих весов объектов [] LinearLayout в 1, и я получаю равномерно распределенные кнопки.

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

Это может быть достигнуто при назначении weight каждой кнопке, добавленной внутри контейнера, очень важно определить горизонтальную ориентацию:

  int buttons = 5; RadioGroup rgp = (RadioGroup) findViewById(R.id.radio_group); rgp.setOrientation(LinearLayout.HORIZONTAL); for (int i = 1; i <= buttons; i++) { RadioButton rbn = new RadioButton(this); rbn.setId(1 + 1000); rbn.setText("RadioButton" + i); //Adding weight LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f); rbn.setLayoutParams(params); rgp.addView(rbn); } 

Поэтому мы можем получить это на нашем устройстве в результате:

Введите описание изображения здесь

Даже если мы поворачиваем наше устройство, weight определенный в каждой кнопке, может распределять элементы равномерно вдоль контейнера:

Введите описание изображения здесь

Я создал пользовательский View DistributeLayout для этого.

Лучший подход – использовать TableLayout с android: layout_width = "match_parent", а в столбцах используется android: layout_weight = "1" для всех столбцов

Я предлагаю вам использовать атрибут weightSum от LinearLayout.

Добавление тега android:weightSum="3" к объявлению xml LinearLayout, а затем android:layout_weight="1" к вашим кнопкам приведет к равномерному распределению 3 кнопок.

Вышеупомянутые ответы с использованием layout_didn't работают для меня, но следующее.

 <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_weight="0.1" android:layout_gravity="center_horizontal" > <android.support.design.widget.FloatingActionButton android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" /> <android.support.design.widget.FloatingActionButton android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" android:layout_marginLeft="40dp" android:layout_marginStart="40dp"/> <android.support.design.widget.FloatingActionButton android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" android:layout_marginLeft="40dp" android:layout_marginStart="40dp" /> <android.support.design.widget.FloatingActionButton android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" android:layout_marginLeft="40dp" android:layout_marginStart="40dp"/> </LinearLayout> 

Вот как он выглядит на экране,

Введите описание изображения здесь

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="Tom" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="24sp" android:layout_weight="3"/> <TextView android:text="Tim" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="24sp" android:layout_weight="3"/> <TextView android:text="Todd" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="24sp" android:layout_weight="3"/> </LinearLayout> 

По кругу, Том, Тим и Тодд считаются 3 сантиметрами. Если вы хотите, чтобы это был сенсорный экран, поставьте его так, чтобы Том и Тим считались 1 сантиметром, что означает, что они объединяют виртуальные, но его 2D-плоскость находится внизу. Это отображается на экране.