Android button layout-получить две кнопки бок о бок по всему экрану

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

вот мой 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 ответов


измените XML кнопок, чтобы включить :

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

Так как никто не объясняет, почему их решений, я дам ему идти.

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

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

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

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

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

Итак, если вы хотите, чтобы ваша следующая кнопка была в два раза больше, чем Кнопка предварительного просмотра, вы можете сделать это:

  • для кнопки предварительного просмотра: layout_weight=1
  • для следующей кнопки: layout_weight=2

в результате родитель будет разрезан на 3 части, 2 из которых будут выделены на кнопку Next и 1 на кнопку Previews.

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


<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. дайте фиксированную ширину для вашей кнопки (например, 50dip).
  2. дайте ширину как 0dp и вставьте еще один атрибут в обе кнопки " вес " и дайте 0.5 dip для каждого...

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


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

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

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

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