Android按钮布局 - 在整个屏幕上并排显示两个按钮

时间:2011-08-30 19:50:13

标签: android xml button android-linearlayout

我有两个按钮,我希望水平并排显示,但它们一起填充手机的水平长度。高度是包装内容,这很好。我现在的问题是只显示一个按钮(在屏幕上伸展)。

这是我的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 个答案:

答案 0 :(得分:23)

更改按钮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"/>

答案 1 :(得分:13)

由于没有人解释为什么他们的解决方案有效,我会试一试。

问题在于按钮的布局。这两个相关的属性是layout_width和layout_weight。

在其他布局系统中,当您指示布局的每个元素必须填充父级(layout_width =“fill_parent”)时,它们通过在它们之间平均分配父级空间来实现。所以,他们每个人都有相同的规模。

  

相反,在Android的布局系统中,如果两个元素都有   layout_width =“fill_parent”第一个元素(在你的情况下,是   预览按钮)将被拉伸以填充父级和第二个   (或第三,或等)将没有任何空间可以分发,所以它   将不可见。

现在,要让它了解您希望显示两个按钮,请为每个按钮设置layout_weight。要使按钮具有相同的大小,请为它们设置相同的布局权重。

layout_weight定义每个按钮占用父节点的“部分”(或段)数。父母将被切割成等于儿童片段总和的多个片段。如果你想制作一个比另一个大三倍的按钮,你必须为它分配等于第一个按钮的部分数量的部分数量,再加上三个。

  

所以如果你想让你的下一个按钮大两倍   预览按钮,您可以这样做:

     
      
  • for Previews按钮:layout_weight = 1
  •   
  • for Next按钮:layout_weight = 2
  •   

因此,父母将分为3部分,其中2部分将分配给“下一步”按钮,1部分将分配给“预览”按钮。

此处采用的示例适用于按钮和水平布局,但这适用于任何类型的对象以及垂直布局父级。

答案 2 :(得分:5)

<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创建了一个居中的间隔符,并且相对对齐。左按钮为父左侧和间隔,右按钮为左按钮,右侧为父。

答案 3 :(得分:1)

Button的父级是Linear-Layout,您将Button的宽度设置为填充父级,因此它占据整个空间。你有两个选择来实现这个...

  1. 为您的按钮指定固定宽度(例如50dip)。
  2. 将宽度设为0dp,并在两个按钮“weight”中再插入一个属性,并为每个按钮添加0.5dip ...

答案 4 :(得分:1)

两个按钮应位于线性布局上。线性布局应该是水平的,每个按钮的权重为1.这应该为您提供两个沿屏幕宽度相同大小的按钮。这是一个样本 Horizontal orientation: check the 2 Buttons at the end of this xml layout

答案 5 :(得分:0)

您的要求是

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

我发现那些仍然无法得到他们想要的人的主要问题。 当使用具有传统(开箱即用/默认)背景的按钮时,它具有内置边距。 如果您尝试使用单一颜色手动更改背景,则可以轻松地告诉您只需要设置单独的背景。 除此之外,当您放入权重时,它将起作用。