我有两个按钮,我希望水平并排显示,但它们一起填充手机的水平长度。高度是包装内容,这很好。我现在的问题是只显示一个按钮(在屏幕上伸展)。
这是我的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"
/>
答案 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的宽度设置为填充父级,因此它占据整个空间。你有两个选择来实现这个...
答案 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)
我发现那些仍然无法得到他们想要的人的主要问题。 当使用具有传统(开箱即用/默认)背景的按钮时,它具有内置边距。 如果您尝试使用单一颜色手动更改背景,则可以轻松地告诉您只需要设置单独的背景。 除此之外,当您放入权重时,它将起作用。