Как получить высоту кнопки, соответствующую высоте другого элемента? - PullRequest
54 голосов
/ 16 ноября 2010

Я хочу поместить кнопку рядом с EditText, и я хочу, чтобы их высота соответствовала.

Например, из встроенного браузера Android:

alt text

Кнопка «Перейти» имеет ту же высоту, что и поле EditText.Я знаю, что мог бы обернуть оба этих представления в родительский вид компоновки и установить для обоих их высот значение fill_parent, и это позволило бы им соответствовать.Тем не менее, я хотел бы сделать это без необходимости придавать макету статический размер.Я бы предпочел, чтобы EditText брал любую необходимую ему высоту в зависимости от размера шрифта, а затем чтобы кнопка рядом с ним соответствовала любой возможной высоте.

Возможно ли это с макетом xml?

Ответы [ 3 ]

65 голосов
/ 16 ноября 2010

Предположительно, EditText и Button находятся внутри RelativeLayout.Установите атрибуты макета кнопки на alignTop и alignBottom из EditText.

28 голосов
/ 16 ноября 2010

Вам нужно будет сделать EditText wrap_content на его высоте и иметь Button просто fill_parent. Вам нужно будет обернуть их обоих в Layout родителя. Таким образом, они связаны с одним и тем же Layout родителем.

Попробуйте и посмотрите, как это работает, если это поможет, дайте мне знать. Если это не так, я могу дать вам код, который поможет вам.

16 голосов
/ 21 мая 2013

То, что вы хотите, это относительное расположение.Пример с некоторыми комментариями выглядит следующим образом:

Мы начинаем с этого RelativeLayout в качестве родителя.Это может обернуть весь контент.В этот родительский элемент мы поместили 2 элемента, кнопку и editText из вашего примера.

<?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_alignParentRight и layout_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" />

Теперь второй элемент, 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 меньше по высоте, он не будет соответствовать кнопке, рядом с которой он находится.Для этого нужно добавить еще несколько параметров макета.Волшебные из них вы ищете layout_alignBottom и layout_alignParentTop .

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

Добавьте эти 2, и вы получите правильный макет.

enter image description here

...