Вопрос

Я всегда читаю об этом забавном весовом значении в документациях Android. Теперь я хочу попробовать это в первый раз, но он вообще не работает.

Как я понимаю его из документации этой макета:

  <LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">

     <Button
        android:text="Register"
        android:id="@+id/register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dip"
        weight="1" />

     <Button
        android:text="Not this time"
        android:id="@+id/cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dip"
        weight="1" />

  </LinearLayout>

Должна создать две кнопки, которые горизонтально выровнены и имеют одинаково пространство. Проблема в том, что две кнопки не растут, чтобы заполнить пространство.

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

Это было полезно?

Решение

Вы не устанавливаете layout_weight имущество. Ваш код читает weight="1" и это должно прочитать android:layout_weight="1".

Другие советы

3 вещи, чтобы помнить:

  • установить Android: Layout_width детей до "0dp"
  • установить Android: WeeSum. родителя (редактировать: Как заметил Джейсон Мур, этот атрибут является необязательным, потому что по умолчанию он устанавливается на сумму детской макеты)
  • установить Android: Layout_weight. каждого ребенка пропорционально (например, Heagsum = "5", три детей: layout_weight = "1", layout_weight = "3", layout_weight = "1")

Пример:

    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:weightSum="5">

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

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="2" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="3" />

    </LinearLayout>

И результат:

Layout weight example

Это android:layout_weight. Отказ Вес можно использовать только в LinearLayout. Отказ Если ориентация linearlayout вертикальна, то используйте android:layout_height="0dp" И если ориентация горизонтальная, то используйте android:layout_width = "0dp". Отказ Это будет работать идеально.

Это изображение суммирует линейную планировку.

Linear Layout and Weight

Вы можете выполнить эту ссылку для получения дополнительной информации по теме. Просто математика - виды, просматривать группы и макеты

Видеоуправление для линейной макеты: ширина, высота и веса

Учебник линейного макета Android

Попробуйте установить layout_width обеих кнопок на «0DIP» и weight обеих кнопок к 0.5

LinearLayout поддерживает присвоение веса для отдельных детей. Этот атрибут назначаетважность«Значение для представления и позволяет расширить, чтобы заполнить любое оставшееся пространство на родительском представлении. Вес по умолчанию равен нулю

Расчет назначить любой Оставшиеся / дополнительно пространство между ребенком. (не общее пространство)

Пространство, назначенное для ребенка = (ребенок индивидуальный вес) / (сумма веса каждого ребенка в линейной макете)

Пример (1): Если есть три текстовых поля, и двое из них объявляют вес 1, в то время как третий отдается не весом (0), то Оставшиеся / дополнительно пространство назначает

1st text box = 1/(1+1+0) 
2nd text box = 1/(1+1+0) 
3rd text box = 0/(1+1+0) 

Пример (2) : Допустим, у нас есть текстовая метка и два элемента редактирования текста в горизонтальной строке. Этикетка не имеет указанного макета_, поэтому он занимает минимальное пространство, необходимое для рендера. Если Layout_Weight каждой из двух элементов редактирования текста устанавливается на 1, оставшаяся ширина в родительской макете будет равномерно расщеплена между ними (потому что мы утверждаем, что они одинаково важны).

calculation : 
1st label = 0/(0+1+1) 
2nd text box = 1/(0+1+1) 
3rd text box = 1/(0+1+1)

Если первый текстовый блок имеет Layout_weight 1, а второе текстовое поле имеет макет 2 веса 2, то одна треть оставшегося пространства будет дано первой, а две трети на вторую (потому что мы претендуем на второй более важный).

calculation : 
1st label = 0/(0+1+2) 
2nd text box = 1/(0+1+2) 
3rd text box = 2/(0+1+2) 

В поле ширины кнопки заменить wrap-content с участием 0dp.
Используйте атрибут Layout_Weight вида.

android:layout_width="0dp"  

Вот как ваш код будет выглядеть:

<LinearLayout
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:orientation="horizontal">

 <Button
    android:text="Register"
    android:id="@+id/register"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:layout_weight="1" />

 <Button
    android:text="Not this time"
    android:id="@+id/cancel"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:layout_weight="1" />    

</LinearLayout>

Layout_Weight используется для распределения какого-либо левого места в пропорции. В этом случае две кнопки принимают ширину «0DP». Таким образом, остальное пространство будет разделено на 1: 1 пропорцию среди них, то есть пространство будет разделено поровну между видами кнопок.

Как ответ @Manoj seelan.

Заменять android:layout_weight С участием android:weight.

Когда вы используете Масса с участием LinearLayout. Отказ Вы должны добавить weightSum в LinearLayout и в соответствии с ориентацией вашего LinearLayout Вы должны установить 0dp Для ширины / высоты всем LinearLayoutвиды детей

Пример :

Если Ориентация Linearlayout является Vertical Затем установите ширину всех LinearLayoutвид детей с 0dp

 <LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
     android:weightSum="3">

     <Button
        android:text="Register"
        android:id="@+id/register"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:layout_weight="2" />

     <Button
        android:text="Not this time"
        android:id="@+id/cancel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:layout_weight="1" />

  </LinearLayout>

Если ориентация Linearlayout о horizontal Затем установите высоту всех LinearLayoutвид детей с 0dp.

 <LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
     android:weightSum="3">

     <Button
        android:text="Register"
        android:id="@+id/register"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:padding="10dip"
        android:layout_weight="2" />

     <Button
        android:text="Not this time"
        android:id="@+id/cancel"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:padding="10dip"
        android:layout_weight="1" />

  </LinearLayout>

Возможно, установить оба кнопки Layout_Width Properties для «Fill_Parent», сделает трюк.

Я только что проверил этот код, и он работает в эмуляторе:

<LinearLayout android:layout_width="fill_parent"
          android:layout_height="wrap_content">

    <Button android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="hello world"/>

    <Button android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="goodbye world"/>

</LinearLayout>

Обязательно установите Layout_Width на «Fille_Parent» на обеих кнопках.

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/logonFormButtons"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="true"       
        android:orientation="horizontal">

        <Button
            android:id="@+id/logonFormBTLogon"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"            
            android:text="@string/logon"
            android:layout_weight="0.5" />

        <Button
            android:id="@+id/logonFormBTCancel"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"            
            android:text="@string/cancel"
            android:layout_weight="0.5" />
    </LinearLayout>

В приведенном выше XML установите android:layout_weight линейного макета как 2: android:layout_weight="2"

Плюс вам нужно добавить это android:layout_width="0dp" Для детей видов [Пункт кнопки LinerLayout

Вы должны написать так, как это работает для меня

<LinearLayout
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal"
            android:weightSum="2">

         <Button
            android:text="Register"
            android:id="@+id/register"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dip"
            android:layout_weight="1" />

         <Button
            android:text="Not this time"
            android:id="@+id/cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dip"
            android:layout_weight="1" />
 <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="Button 1" />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="Button 2" />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="Button 3" />

    </LinearLayout>

Ниже приведены изменения (отмечены в ЖИРНЫЙ) В вашем коде:

<LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">

     <Button
        android:text="Register"
        android:id="@+id/register"
        android:layout_width="0dp" //changes made here
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:layout_weight="1" /> //changes made here

     <Button
        android:text="Not this time"
        android:id="@+id/cancel"
        android:layout_width="0dp" //changes made here
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:layout_weight="1" /> //changes made here

  </LinearLayout>

Поскольку ваш Linearlayout имеет ориентацию в качестве горизонтали, поэтому вам нужно будет сохранить ширина только как 0dp. для использования весов в этом направлении. (Если ваша ориентация была вертикальной, вы бы держали свой высот только 0DP).

Так как есть 2 просмотра, и вы разместили android:layout_weight="1" Для взглядов это означает, что он будет разделить два взгляда одинаково в горизонтальном направлении (или шириной).

Это идеальный ответ на вашу проблему

  <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:orientation="horizontal"  >   
     <Button 
        android:text="Register" android:id="@+id/register"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:padding="10dip" weight="1" />
     <Button 
        android:text="Not this time" android:id="@+id/cancel"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:padding="10dip" weight="1" />
  </LinearLayout>

Заменять wrap_content с участием fill_parent.

 <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:background="#008">

            <RelativeLayout
                android:id="@+id/paneltamrin"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"

                >
                <Button
                    android:id="@+id/BtnT1"
                    android:layout_width="wrap_content"
                    android:layout_height="150dp"
                    android:drawableTop="@android:drawable/ic_menu_edit"
                    android:drawablePadding="6dp"
                    android:padding="15dp"
                    android:text="AndroidDhina"
                    android:textColor="#000"
                    android:textStyle="bold" />
            </RelativeLayout>

            <RelativeLayout
                android:id="@+id/paneltamrin2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                >
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="150dp"
                     android:drawableTop="@android:drawable/ic_menu_edit"
                    android:drawablePadding="6dp"
                    android:padding="15dp"
                    android:text="AndroidDhina"
                    android:textColor="#000"
                    android:textStyle="bold" />

            </RelativeLayout>
        </LinearLayout>

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top