Установить две кнопки одинаковой ширины независимо от размера экрана? - PullRequest
40 голосов
/ 08 августа 2011

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

<LinearLayout android:id="@+id/linearLayout1" 
              android:layout_height="wrap_content" 
              android:layout_width="fill_parent">
        <Button android:id="@+id/aktiviraj_paket" 
                android:text="Aktiviraj" 
                android:layout_height="40sp" 
                android:layout_width="160sp" 
                android:background="@drawable/my_border3" 
                android:onClick="myClickHandle"></Button>
        <Button android:id="@+id/deaktiviraj_paket" 
                android:text="Deaktiviraj" 
                android:layout_height="40sp" 
                android:layout_width="fill_parent" 
                android:background="@drawable/my_border3"
                android:onClick="myClickHandle">
        </Button>
</LinearLayout>

Так вот, если я использую родительский заполнитель на обеих кнопках, они будут расположены один на другом, поэтому я сделал первую кнопку шириной 160sp, а вторая - fill_parent. Если это показано на экране 4 дюйма или меньше, кнопки имеют одинаковый размер, но если я попробую это на планшете (10 дюймов), первая кнопка останется шириной 160sp, а вторая растянута до конца экрана (потому что fill_parent). Могу ли я сделать это, чтобы обе кнопки могли быть одинакового размера независимо от размера экрана ??

Ответы [ 9 ]

96 голосов
/ 08 августа 2011

Используйте android:layout_weight="1" на обоих Button с. Установите android:layout_width="0dp" на обоих. Поскольку обе кнопки теперь имеют одинаковый вес, теперь у каждой из них будет половина ширины родительского элемента.

Вы можете узнать больше здесь: http://developer.android.com/guide/topics/ui/layout/linear.html

18 голосов
/ 15 июля 2014

Если вы хотите сделать все кнопки шириной самой широкой кнопки, настройка весов этого не сделает.Скорее, вы можете поместить все кнопки в TableLayout:

   <TableLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/short_text" />
        </TableRow>

        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/enter_manually" />
        </TableRow>
    </TableLayout>

Этот макет будет отображать 2 кнопки, одна поверх другой, одинаковой ширины.

3 голосов
/ 09 декабря 2017
<LinearLayout
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_weight="1"
        android:text="One" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_weight="1"
        android:text="Two" />
</LinearLayout>

Это пример того, как кнопки одинакового размера для бок о бок могут быть выполнены сверху. Код

android:layout_weight 

используется для назначения пространства для кнопок или чего-либо другогосумма для каждого дочернего элемента LinearLayout.

Примечание. Работает только для линейного макета.

3 голосов
/ 09 августа 2011
Display display=getWindowManager().getDefaultDisplay();
    int width=display.getWidth();
    btn1.setWidth(width/2);
    btn2.seTwidth(width/2);

Установите что-нибудь в XML-файле, затем сначала найдите ширину устройства, затем установите ширину, равную половине для обеих кнопок. Теперь на каждом устройстве они будут выглядеть одинаково

3 голосов
/ 08 августа 2011

для каждой кнопки:

android:layout_weight="0.5"
android:layout_width="0dp"
1 голос
/ 08 февраля 2015
android:layout_weight="0.5"
android:layout_width="0dp

работает

0 голосов
/ 15 мая 2019

Вы можете установить их в линейном макете, вложенном в относительный макет, как это

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:gravity="center"
    android:orientation="vertical">



        <Button
            android:id="@+id/bestBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:layout_marginBottom="5dp"
            android:textAllCaps="false"
            android:textSize="16sp"
            android:textColor="@color/grey_light2"
            android:background="@drawable/sharefb_btn"
            android:text="@string/sharefb" />
        <Button
            android:id="@+id/playBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/grey_light2"
            android:textAllCaps="false"
            android:textSize="16sp"
            android:layout_marginBottom="50dp"
            android:textStyle="bold"
            android:background="@drawable/puzzle_opening_btn_ncvtelen_3"
            android:text="@string/playagain" />

</LinearLayout>

и вы получите что-то подобное

enter image description here

0 голосов
/ 13 декабря 2018

Это работает:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <Button
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="wrap_content"
        android:text="my btn 1"/>
    <Button
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="wrap_content"
        android:text="my btn 2"/>
    </LinearLayout>
0 голосов
/ 02 июня 2017

Установить android: layout_weight = "1" в содержащем макете. Линейный макет должен иметь android: ориентацию, установленную как горизонтальную. И тогда внутренние кнопки должны иметь следующее:

андроида: layout_width = "0dp"

Android: layout_weight = "0,5"

...