2013-05-14 2 views
4

Как Android вычисляет размер представления, когда у меня есть два вида в той же «строке», одна с шириной = «fill_parent»?Android RelativeLayout и childs with layout_width = "match_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 

ответ

7

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

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

+0

Спасибо, теперь я понимаю. Я не могу проголосовать за вас :( – juan

+0

В будущем вы могли бы вернуться и поддержать :), и вам будет приятно – TronicZomB

1

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

+0

Спасибо, теперь я понимаю. Я не могу проголосовать за вас :( – juan

0

Если вы используете 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/> 
+0

Да, я знаю, что RelativeLayout не имеет строк, это было причиной цитат. Я хотел знать, как работает match_parent, а не конкретное решение. – juan

Смежные вопросы