Android RelativeLayout и дочерние элементы с layout_width="match_parent"

Как Android рассчитывает размер представления, когда у меня есть два представления в одной и той же "строке", один с шириной ="fill_parent"?

Пример:

<RelativeLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_height="fill_parent"  
    android:layout_width="fill_parent">  
    <EditText  
        android:id="@+id/EditText01"  
        android:hint="Enter some text..."  
        android:layout_alignParentLeft="true"  
        android:layout_width="match_parent"  
        android:layout_toLeftOf="@+id/Button01"  
        android:layout_height="wrap_content"></EditText>  
    <Button  
        android:id="@+id/Button01"  
        android:text="Press Here!"  
        android:layout_width="wrap_content"  
        android:layout_alignParentRight="true"  
        android:layout_height="wrap_content"></Button>  
</RelativeLayout>

Этот код дает все свободное пространство для EditText и показывает кнопку справа от него. Но с этими изменениями EditText заполняет всю ширину, и кнопка выходит за пределы экрана:

<RelativeLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_height="fill_parent"  
    android:layout_width="fill_parent">  
    <EditText  
        android:id="@+id/EditText01"  
        android:hint="Enter some text..."  
        android:layout_alignParentLeft="true"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"></EditText>  
    <Button  
        android:id="@+id/Button01"  
        android:text="Press Here!"  
        android:layout_width="wrap_content"  
    android:layout_toRightOf="@+id/EditText01"
        android:layout_height="wrap_content"></Button>  
</RelativeLayout

3 ответа

Решение

android:layout_toLeftOf="@+id/Button01" заставит правую границу EditText выровнять по левой стороне Button Таким образом, Android игнорирует match_parent ширина заставляет ширину заполнять только от левой родительской стороны к правой стороне кнопки.

android:layout_toRightOf="@+id/EditText01" заставит левую границу Button выровнять по правой стороне EditText, но так как EditText является match_parent Ширина правой стороны выровнена по правой стороне родительского вида, и Android просто вытеснит кнопку с экрана.

В обоих ваших примерах <EditText/> подходит по всей ширине экрана. В первом примере Button не зависит от <EditText/>, поэтому он может быть выровнен по правому краю экрана. Во втором примере, однако, Button должен выравниваться вправо от `, поэтому он выталкивается из поля зрения.

Если вы используете RelativeLayout тогда у вас нет "строк", все, что у вас есть, это пространство, где вы можете расположить представления. Если вы хотите удерживать кнопку в правой части экрана и иметь EditText, заполняющий остальную часть экрана, вы можете сделать что-то вроде этого:

<RelativeLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_height="fill_parent"  
    android:layout_width="fill_parent">  
    <EditText  
        android:id="@+id/EditText01"  
        android:hint="Enter some text..."  
        android:layout_toLeftOf="@+id/Button01"
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"></EditText>  
    <Button  
        android:id="@+id/Button01"  
        android:text="Press Here!" 
        android:alignParentRight="true"
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"></Button>  
</RelativeLayout/>
Другие вопросы по тегам