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

Posted

技术标签:

【中文标题】如何让按钮的高度与另一个元素的高度相匹配?【英文标题】:How to get a button's height to match another element's height? 【发布时间】:2011-05-10 11:39:49 【问题描述】:

我想在 EditText 旁边放一个按钮,我希望它们的高度匹配。

例如,从内置的 android 浏览器:

Go 按钮与 EditText 字段的高度相同。我知道我可以将这两个视图包装在父布局视图中,并将它们的高度都设置为 fill_parent,这样它们就会匹配。但是,我想这样做而不必为布局提供静态大小。我宁愿让 EditText 根据字体大小采用它需要的任何高度,然后让它旁边的按钮匹配可能的任何高度。

这可以通过 xml 布局实现吗?

【问题讨论】:

此问题需要更新以包含新的 ConstraintLayout。 【参考方案1】:

大概EditTextButtonRelativeLayout 内。将按钮的布局属性设置为EditTextalignTopalignBottom

【讨论】:

这很好用,不需要包装,非常感谢。 如何将 EditText 布置在按钮的左侧?我尝试在 EditText 上使用 layout_toLeftOf="the id of the button" 但由于 Button 是在 xml 文件中的 EditText 之后声明的,因此出现按钮 id 不存在的错误。我无法反转它们,因为我有同样的问题,Button 指的是 EditText 的 id 用于您描述的对齐方式。关于如何处理这个问题的任何建议?谢谢【参考方案2】:

您需要将EditText wrap_content 设置在其高度上,并将Button 设置为仅fill_parent。您需要将它们都包裹在 Layout 父级中。这样它们就与同一个Layout 父级关联。

尝试一下,看看它是如何工作的,如果有帮助,请告诉我。如果不是,也许我可以给你一些代码来帮助你。

【讨论】:

感谢您提供帮助,但 Falmarri 的回答非常有效,所以我准备好了。再次感谢。 实际上,在没有包装视图的情况下尝试执行此操作后,由于我在响应 Falmarri 的回答时描述的问题,我无法让按钮正确排列在文本的右侧。使用您的方法,我能够正确调整按钮的大小和位置,因此我会将您的方法标记为答案。【参考方案3】:

您想要的是相对布局。一些cmets的例子如下

我们从这个 RelativeLayout 作为父级开始。这可以包装所有内容。 在该父级中,我们放置了 2 个元素,即您示例中的按钮和 editText。

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

我们首先将 Button 元素放在右上角。这就是 layout_alignParentRightlayout_alignParentTop 的意义所在。同样,这是最大的元素,所以我们将让它使用 wrap_content 来包装所有内容的高度和宽度。

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

现在第二个元素,即我们想要对齐到前一个元素左侧的editText,使用带有layout_toLeftOf参数的id引用来完成。

<EditText
    android:id="@+id/EditText1"
    android:layout_
    android:layout_
    android:layout_toLeftOf="@+id/Button1"
    android:hint="some_hint"
    android:inputType="textCapWords" />

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

</RelativeLayout>

由于 editText 的高度较小,因此它与放置在旁边的 Button 不匹配。解决方案是添加更多布局参数。您正在寻找的神奇的是 layout_alignBottomlayout_alignParentTop

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

添加这 2 个,你的布局就正确了。

【讨论】:

@farhan patel 这就是为什么我开始解释说你需要一个相对布局;-)【参考方案4】:

有了ConstraintLayout的介绍,这个任务使用match-constraint属性变得简单了很多

【讨论】:

以上是关于如何让按钮的高度与另一个元素的高度相匹配?的主要内容,如果未能解决你的问题,请参考以下文章

缩放 SVG 到相邻元素的高度

如何撑开父元素,让父元素div自动适应高度的问题

代码中的 UIImageView 和自动布局

垂直布局的小型设备上的高度不正确? [关闭]

像 Google SignIn Button 一样设置 Facebook SignIn 按钮高度

如何使用 C# 设置列表框的高度以匹配其中的元素数量?