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/>