Можно ли равномерно распределить кнопки по ширине линейного макета Android? - PullRequest
222 голосов
/ 12 августа 2010

У меня есть линейный макет (ориентированный горизонтально), который содержит 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>

Ответы [ 17 ]

3 голосов
/ 30 октября 2014

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

2 голосов
/ 27 декабря 2017

Самый простой и быстрый способ (но не самый лучший) - добавить TextView с пустым текстовым атрибутом, например

android:text=""

цвет фона должен быть таким же, как в LinearLayout, тогда вы можете использовать свойство padding, например,

android:paddingBottom="250dp"

или что вам нужно. Вот пример.

2 голосов
/ 26 августа 2017

Прежде всего правильные ответы, но в случае, если вам нужны видимые и пропавшие функции, тогда этот прагматический метод будет хорошо работать

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btnOne"
            android:layout_width="120dp"
            android:layout_height="match_parent"></Button>

        <Button
            android:id="@+id/btnTwo"
            android:layout_width="120dp"
            android:layout_height="match_parent"></Button>


        <Button
            android:id="@+id/btnThree"
            android:layout_width="120dp"
            android:layout_height="match_parent"></Button>
    </LinearLayout>



 float width=CommonUtills.getScreenWidth(activity);
            int cardWidth=(int)CommonUtills.convertDpToPixel (((width)/3),activity);

LinearLayout.LayoutParams params =
                new LinearLayout.LayoutParams(width,
                        LinearLayout.LayoutParams.MATCH_PARENT);

btnOne.setLayoutParams(params);
btnTwo.setLayoutParams(params);
btnThree.setLayoutParams(params);

public class CommonUtills {
public static float getScreenWidth(Context context) {
        float width = (float) 360.0;
        DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
        width = displayMetrics.widthPixels / displayMetrics.density;
        return width;
    }
}
2 голосов
/ 11 января 2017

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

<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>

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

enter image description here

1 голос
/ 14 января 2018

Равно взвешенные дочерние элементы

Чтобы создать линейный макет, в котором каждый дочерний элемент использует одинаковое количество места на экране, установите для android: layout_height каждого вида значение "0dp "(для вертикальной компоновки) или android: layout_width каждого вида до" 0dp "(для горизонтальной компоновки).Затем установите для android: layout_weight каждого представления значение «1».

Чтобы это работало в группе представлений LinearLayout, значения атрибутов для android:layout_width и android:layout_height должны бытьравно "match_parent" ...

1 голос
/ 09 ноября 2017
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<TextView
    android:text="Tom"
    android:layout_width="wrap_content"
    android:layout_height="200dp"
    android:textSize="24sp" />

<TextView
    android:text="Tim"
    android:layout_width="wrap_content"
    android:layout_height="200dp"
    android:textSize="24sp" />

<TextView
    android:text="Todd"
    android:layout_width="wrap_content"
    android:layout_height="200dp"
    android:textSize="24sp" />

0 голосов
/ 11 июня 2017
<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-плоскость находится внизу. Это отображается на экране.

...