Intereting Posts
В буфере событий GreenRobot отсутствует аннотация, «нет публичных методов», Java.lang.AbstractMethodError, когда шпион LinkedList в Android Как установить значок для диалога в Android Google Cloud Messaging отправляет уведомление всем устройствам Как защитить общие настройки Android? Странное поведение жизненного цикла в приложении Screen Saver Это правильный способ обнаружить прикосновение к прямоугольнику в LibGdx? Кажется, не работает для меня Сервис или поток или AsyncTask Единственное намерение позволить пользователю сделать снимок ИЛИ выбрать изображение из галереи на Android OnRestore не вызывается для моего настраиваемого BackupAgent Android ScrollView прокручивается вверх после вызова setVisibility (View.VISIBLE) в дочернем представлении CardView layout_width = "match_parent" не соответствует родительской ширине RecyclerView Проблемы с клавиатурой, возникающие при изменении ориентации Угрозы GooglePlayServicesUtil.isGooglePlayServicesAvailable () Дизайн кода для многократного использования элементов пользовательского интерфейса drag & drop в android

Можно равномерно распределить кнопки по ширине андроида 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-плоскость находится внизу. Это отображается на экране.