web-dev-qa-db-ja.com

別の要素の高さと一致するようにボタンの高さを取得する方法は?

EditTextの横にボタンを配置し、それらの高さを一致させたい。

たとえば、組み込みのAndroidブラウザから:

alt text

Goボタンは、EditTextフィールドと同じ高さです。これらの両方のビューを親レイアウトビューでラップし、両方の高さをfill_parentに設定すると、一致するようになります。ただし、レイアウトに静的なサイズを与えることなくこれを実行したいと思います。私はむしろ、EditTextにフォントサイズに基づいて必要な高さを取得させ、次に横にあるボタンを高さに合わせます。

これはxmlレイアウトで可能ですか?

54
cottonBallPaws

EditTextwrap_contentをその高さに作成し、Buttonをちょうどfill_parentにする必要があります。両方をLayout親でラップする必要があります。そうすれば、それらは同じLayout親に関連付けられます。

それを試して、それがどのように機能するかを確認してください。そうでない場合、私はあなたを助けるいくつかのコードを与えることができます。

28
prolink007

おそらくEditTextButtonRelativeLayoutの中にあります。ボタンのレイアウト属性を、alignTopalignBottomおよびEditTextに設定します。

65
Falmarri

必要なのは相対的なレイアウトです。コメント付きの例は次のとおりです

まず、親としてRelativeLayoutから始めます。すべてのコンテンツをラップできます。その親には、例のボタンとeditTextの2つの要素を配置します。

<?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="fill_parent" >

まず、Button要素を右上隅に配置します。 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" />

2番目の要素である前の要素の左側に配置するeditTextで、id参照をlayout_toLeftOfパラメーターと共に使用して、それを実現します。

<EditText
    Android:id="@+id/EditText1"
    Android:layout_width="fill_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"

これら2つを追加すると、レイアウトが正しくなります。

enter image description here

16
hcpl