如何使一个按钮的高度与另一个元素的高度匹配?

61
我想在EditText旁边放一个按钮,并且我希望它们的高度相匹配。
例如,在内置的Android浏览器中: alt text Go按钮的高度与EditText字段相同。我知道我可以将这两个视图包装在父布局视图中,并将它们的高度设置为fill_parent,这样它们就可以匹配。然而,我想在不给布局一个静态大小的情况下做到这一点。我宁愿让EditText根据字体大小需要采取任何高度,然后使旁边的按钮匹配任何可能的高度。
这是否可以在xml布局中实现?

2
这个问题需要更新,以包括新的 ConstraintLayout。 - SMBiggs
4个回答

75

假设EditTextButton都在一个RelativeLayout中。将按钮的布局属性设置为EditTextalignTopalignBottom


3
这个方法非常有效,而且不需要任何包装,非常感谢。 - cottonBallPaws
2
我该如何将EditText布局放在按钮的左侧?我尝试在EditText上使用layout_toLeftOf="按钮的id",但由于Button在xml文件中在EditText之后声明,所以我会收到错误消息,指出按钮的id不存在。我无法颠倒它们的顺序,因为我遇到了同样的问题,即Button正在引用EditText的id以进行对齐,就像您描述的那样。您有什么建议来解决这个问题吗?谢谢。 - cottonBallPaws

28

您需要将EditText的高度设置为wrap_content,并将Button设置为fill_parent。您需要将它们都包装在一个Layout父容器中,这样它们将与相同的Layout父容器相关联。

尝试一下,看看它是否有效,如果有帮助,请让我知道。如果没有效果,也许我可以给您一些能够帮助您的代码。


感谢您提供帮助,但是Falmarri的答案完美地解决了我的问题,所以我已经准备好了。再次感谢。 - cottonBallPaws
实际上,在尝试不使用包装视图的情况下,由于我在回答Falmarri的问题时所描述的问题,我无法使按钮正确地对齐文本的右侧。使用您的方法,我能够正确调整按钮的大小和位置,因此我会将您的答案标记为最佳答案。 - cottonBallPaws

20

您需要的是相对布局。以下是带有注释的示例:

我们以此 RelativeLayout 作为父元素。可以包裹所有内容。 在该父元素中,我们放置了两个元素,即来自您示例的按钮和编辑文本。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

我们先将按钮元素放置在右上角。这就是 layout_alignParentRightlayout_alignParentTop 的作用。因为它是最大的元素,所以我们将使用 wrap_content 来让其自适应所有内容,包括高度和宽度。

<Button
    android:id="@+id/Button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:text="some_text" />

现在是第二个元素,我们想要将其与前面的元素左对齐,使用具有layout_toLeftOf参数的id引用即可实现。

<EditText
    android:id="@+id/EditText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@+id/Button1"
    android:hint="some_hint"
    android:inputType="textCapWords" />

关闭RelativeLayout,现在渲染它,看看你已经得到了什么。

</RelativeLayout>

enter image description here

由于 editText 的高度较小,它无法与旁边的 Button 匹配。 解决方法是添加一些布局参数。您需要寻找的神奇参数是 layout_alignBottomlayout_alignParentTop

   android:layout_alignBottom="@+id/Button1"
    android:layout_alignParentTop="true"

加上这两个,你就能得到正确的布局。

输入图像描述


3
@farhan patel,这就是为什么我开始解释时会说你需要一个相对布局;-) - hcpl

1
使用ConstraintLayout,通过使用match-constraint属性,这项任务变得更加简单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接