Android 按钮布局 - 在整个屏幕上并排获取两个按钮
Posted
技术标签:
【中文标题】Android 按钮布局 - 在整个屏幕上并排获取两个按钮【英文标题】:Android button layout - get two buttons side-by-side across entire screen 【发布时间】:2011-11-07 02:48:09 【问题描述】:我有两个按钮,我希望它们水平并排显示,但它们一起填充了手机的水平长度。高度是包装内容,这很好。我现在的问题是只显示一个按钮(在屏幕上伸展)。
这是我的 XML 代码:
<LinearLayout
android:id="@+id/page_buttons"
android:orientation="horizontal"
android:layout_
android:layout_
android:gravity="center_horizontal"
>
<Button
android:id="@+id/prevButton"
android:layout_
android:layout_
android:text="Previous"
/>
<Button
android:id="@+id/nextButton"
android:layout_
android:layout_
android:text="Next"
/>
【问题讨论】:
鉴于您在 xml 中只指定了一个按钮,您希望屏幕上出现两个按钮的具体情况如何?您是否动态创建第二个并将其添加到线性布局? 我编辑了帖子以使其现在可读。 【参考方案1】:更改您的 Buttons XML 以包含 layout_weight
属性:
<Button android:id="@+id/nextButton"
android:layout_
android:layout_
android:layout_weight="1"
android:text="Next"/>
【讨论】:
除了公认的答案之外,我认为值得指出的是,包裹两个按钮的线性布局应该有选项android:orientation="horizontal"
。我很慢,一开始没听懂。【参考方案2】:
由于没有人解释他们的解决方案为什么有效,我会试一试。
问题在于按钮的布局。关注的两个属性是 layout_width 和 layout_weight。
在其他布局系统中,当您指出布局的每个元素都必须填充父元素时(layout_),它们会通过在它们之间平均分配父元素的空间来做到这一点。因此,它们中的每一个都将具有相同的大小。
相反,在 Android 的布局系统中,如果两个元素都有 layout_ 第一个元素(在您的情况下, 预览按钮)将被拉伸以填充父级和第二个 (或第三个,等等)将没有任何空间可以分配,所以它 将不可见。
现在,为了理解您希望两个按钮都显示,您为每个按钮设置了 layout_weight。要使按钮具有相同的大小,请为它们设置相同的布局权重。
layout_weight 定义了每个按钮占据父级的多少“部分”(或段)。父级将被切割成等于子级段总和的段数。如果你想让一个按钮比另一个大三倍,你必须为其分配的部件数等于第一个按钮的部件数乘以三。
因此,如果您希望“下一步”按钮大两倍,那么 预览按钮,你可以这样做:
预览按钮:layout_weight=1 下一个按钮:layout_weight=2
因此,父级将被分成 3 个部分,其中 2 个将分配给 Next 按钮,1 个分配给 Previews 按钮。
这里的例子是按钮和水平布局,但这对于任何类型的对象和垂直布局父级都适用。
【讨论】:
非常感谢您的解释【参考方案3】:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_>
<Button
android:id="@+id/button01"
android:layout_
android:layout_
android:layout_below="@id/entry"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/space"/>
<TextView
android:id="@+id/space"
android:layout_
android:layout_
android:layout_centerHorizontal="true"/>
<Button
android:id="@+id/button02"
android:layout_toRightOf="@id/button01"
android:layout_
android:layout_
android:layout_below="@id/entry"
android:layout_alignParentRight="true"/>
</RelativeLayout>
似乎您想要两个相等的按钮,而不是包装的内容。我使用 TextView 创建了一个居中的间隔,并与之相对对齐。左键到父级左侧和间隔,右键到左键和父级。
【讨论】:
【参考方案4】:您的 Button 的父级是线性布局,并且您将 Button 的宽度设置为填充父级,因此它占用了整个空间。你有两个选项来实现这个......
-
为您的按钮指定固定宽度(例如 50dip)。
将宽度指定为 0dp,并在两个按钮“权重”中再插入一个属性,并为每个按钮指定 0.5dip...
【讨论】:
【参考方案5】:这两个按钮应该在一个线性布局上。线性布局应该是水平的,每个按钮的权重为 1。这应该给你两个沿屏幕宽度大小相等的按钮。样品在这里 Horizontal orientation: check the 2 Buttons at the end of this xml layout
【讨论】:
【参考方案6】:您的要求是
<LinearLayout
android:id="@+id/page_buttons"
android:orientation="horizontal"
android:layout_
android:layout_
>
<Button
android:id="@+id/prevButton"
android:layout_
android:weight="0.5"
android:layout_
android:text="Previous"
/>
<Button
android:id="@+id/nextButton"
android:layout_
android:weight="0.5"
android:layout_
android:text="Next"
/>
【讨论】:
【参考方案7】:<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_ android:layout_
android:layout_centerHorizontal="true">
<TextView
android:text="@+id/SomeText"
android:id="@+id/TextView01"
android:layout_ android:layout_ />
<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_ android:layout_
android:layout_below="@+id/TextView01">
<Button
android:id="@+id/allow"
android:layout_ android:layout_
android:text="Allow"
android:layout_weight="1.0" />
<Button
android:id="@+id/deny"
android:layout_ android:layout_
android:text="Deny"
android:layout_weight="1.0" />
</LinearLayout>
</RelativeLayout>
【讨论】:
【参考方案8】:对于那些似乎仍然没有得到他们想要的东西的人来说,我发现了主要问题。 当使用具有常规(开箱即用/默认)背景的按钮时,它具有内置边距。 如果您尝试使用单一颜色手动更改背景,您可以轻松判断您只需要设置单独的背景。 除此之外,当您放入重量时,它会起作用。
【讨论】:
以上是关于Android 按钮布局 - 在整个屏幕上并排获取两个按钮的主要内容,如果未能解决你的问题,请参考以下文章
如何使用ios中的自动布局将三个按钮并排放置在中心并留有间距?