Расположение кнопок Android - расположите две кнопки рядом по всему экрану - PullRequest
7 голосов
/ 30 августа 2011

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

Вот мой XML-код:

<LinearLayout 
   android:id="@+id/page_buttons"
   android:orientation="horizontal"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:gravity="center_horizontal"

   >
   <Button
        android:id="@+id/prevButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Previous"
   /> 

   <Button
        android:id="@+id/nextButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Next"
   />

Ответы [ 8 ]

24 голосов
/ 30 августа 2011

Измените XML для кнопок, включив атрибут layout_weight:

<Button android:id="@+id/nextButton"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Next"/>
13 голосов
/ 25 марта 2013

Поскольку никто не объясняет, почему их решения работают, я попробую.

Проблема заключается в расположении кнопок.Двумя соответствующими атрибутами являются layout_width и layout_weight.

В других системах макетов, когда вы указываете, что каждый элемент макета должен заполнить родительский элемент (layout_width = "fill_parent"), они делают это, равномерно распределяя пространствородителя между ними.Таким образом, каждый из них будет иметь одинаковый размер.

Вместо этого в системе макетов Android, если оба элемента имеют layout_width = "fill_parent", первый элемент (в вашем случае кнопка Previews) будетрастягивается, чтобы заполнить родительский элемент, и у второго (или третьего, или т. д.) не останется места для распределения, поэтому он не будет виден.обе кнопки, чтобы показать, вы устанавливаете layout_weight для каждой кнопки.Чтобы кнопки имели одинаковый размер, присвойте им одинаковый вес макета.

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

Так что если выЧтобы кнопка «Далее» была в два раза больше кнопки «Предварительный просмотр», вы можете сделать это:

  • для кнопки «Предварительный просмотр»: layout_weight = 1
  • для кнопки «Далее»: layout_weight = 2

В результате родительский элемент будет разделен на 3 части, 2 из которых будут выделены кнопке «Далее», а 1 - кнопке «Предварительный просмотр».

Пример, приведенный здесь:для кнопок и горизонтальной разметки, но это будет прекрасно работать для любого типа объекта, а также для родительской разметки по вертикали.

5 голосов
/ 18 октября 2011
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content" 
android:layout_below="@id/entry" 
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/space"
/>
<TextView
android:id="@id/space"
android:layout_width="wrap_content"
android:layout_height="wrap_content" 
android:layout_centerHorizontal="true"/>
<Button
android:id="@+id/button02"
android:layout_toRightOf="@id/button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry" 
android:layout_alignParentRight="true"
/>  
</RelativeLayout>

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

1 голос
/ 04 июля 2013

Две кнопки должны быть линейно расположены.Линейное расположение должно быть горизонтальным, и каждая кнопка имеет вес 1. Это должно дать вам две кнопки одинакового размера по ширине экрана.Пример здесь Горизонтальная ориентация: отметьте 2 кнопки в конце этого макета XML

1 голос
/ 13 мая 2013

Родителем вашей кнопки является Linear-Layout, и вы устанавливаете ширину кнопки в качестве родительской заливки, и, следовательно, она занимает все пространство. У вас есть два варианта для реализации этого ...

  1. Дайте фиксированную ширину для вашей кнопки (например, 50dip).
  2. Дайте ширину как 0dp, вставьте еще один атрибут в обе кнопки "weight" и дайте 0.5dip для каждого ...
0 голосов
/ 17 апреля 2015

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

0 голосов
/ 29 августа 2012
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true"> 

    <TextView 
        android:text="@+id/SomeText" 
        android:id="@+id/TextView01" 
        android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

    <LinearLayout 
        android:orientation="horizontal" 
        android:background="@android:drawable/bottom_bar" 
        android:paddingLeft="4.0dip" 
        android:paddingTop="5.0dip" 
        android:paddingRight="4.0dip" 
        android:paddingBottom="1.0dip" 
        android:layout_width="fill_parent" android:layout_height="wrap_content" 
        android:layout_below="@+id/TextView01"> 

        <Button 
            android:id="@+id/allow" 
            android:layout_width="0.0dip" android:layout_height="fill_parent" 
            android:text="Allow" 
            android:layout_weight="1.0" /> 

        <Button 
            android:id="@+id/deny" 
            android:layout_width="0.0dip" android:layout_height="fill_parent" 
            android:text="Deny" 
            android:layout_weight="1.0" /> 

    </LinearLayout> 
</RelativeLayout> 
0 голосов
/ 12 марта 2012

Ваше требование

<LinearLayout 
   android:id="@+id/page_buttons"
   android:orientation="horizontal"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"

   >
   <Button
        android:id="@+id/prevButton"
        android:layout_width="0dp"
        android:weight="0.5"
        android:layout_height="wrap_content"
        android:text="Previous"
   /> 

   <Button
        android:id="@+id/nextButton"
        android:layout_width="0dp"
        android:weight="0.5"
        android:layout_height="wrap_content"
        android:text="Next"
   />
...