RelativeLayout не обрабатывает «toLeftOf» и / или правильное правильное

Я искал решение проблемы с «toLeftOf» и «toRightOf» при использовании RelativeLayout, но havent нашел реальное решение или хороший ответ на это поведение:

В принципе, «toLeftOf» не работает хорошо.

У меня есть два EditText, и я хочу, чтобы изображение отображалось слева от каждого EditText. Когда я пытаюсь это сделать, я получаю следующий результат (редактор Eclipse):

Введите описание изображения здесь

Как вы можете видеть, изображения вообще не отображаются. Здесь используется XML:

<?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="wrap_content" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="35dp" android:background="#010101" android:gravity="center_horizontal" android:orientation="vertical" > <EditText android:id="@+id/login_carNumber" style="@style/EditTextDark" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/prompt_carNumber" android:inputType="phone" android:textAppearance="?android:attr/textAppearanceMedium" android:textCursorDrawable="@null" > <requestFocus /> </EditText> <ImageView android:id="@+id/login_car_icon" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/user" android:layout_toLeftOf="@id/login_carNumber" /> <EditText android:id="@+id/login_password" style="@style/EditTextDark" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/login_carNumber" android:layout_marginTop="10dp" android:hint="@string/prompt_password" android:inputType="phone" android:textAppearance="?android:attr/textAppearanceMedium" android:textCursorDrawable="@null" > </EditText> <ImageView android:id="@+id/login_lock_icon" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/lock" android:layout_toLeftOf="@id/login_password" /> </RelativeLayout> 

Во-первых, почему это не работает?

Если я изменю XML и использую «toRightOf» в EditTexts вместо «toLeftOf» на изображениях, я получаю следующие результаты:

Введите описание изображения здесь

Как вы можете видеть, оба изображения показаны, но они «друг на друга», когда замок должен находиться в левой части второго EditText. Вот XML:

 <?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="wrap_content" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="35dp" android:background="#010101" android:gravity="center_horizontal" android:orientation="vertical" > <EditText android:id="@+id/login_carNumber" style="@style/EditTextDark" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/login_car_icon" android:hint="@string/prompt_carNumber" android:inputType="phone" android:textAppearance="?android:attr/textAppearanceMedium" android:textCursorDrawable="@null" > <requestFocus /> </EditText> <ImageView android:id="@+id/login_car_icon" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/user" /> <EditText android:id="@+id/login_password" style="@style/EditTextDark" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/login_carNumber" android:layout_marginTop="10dp" android:layout_toRightOf="@+id/login_lock_icon" android:hint="@string/prompt_password" android:inputType="phone" android:textAppearance="?android:attr/textAppearanceMedium" android:textCursorDrawable="@null" > </EditText> <ImageView android:id="@+id/login_lock_icon" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/lock" /> </RelativeLayout> 

Второй вопрос; Почему изображение «padlock» поверх первого изображения, а не прямо слева от второго EditText?

Если теперь я добавлю следующую строку в последний ImageView (изображение на замке):

 android:layout_below="@+id/login_car_icon" 

Он размещен правильно, но я думаю, что его «взломать» и не нужно, не так ли?

Итак, последний ImageView имеет следующий XML-интерфейс:

 <ImageView android:id="@+id/login_lock_icon" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/lock" android:layout_below="@+id/login_car_icon" /> 

Результат:

Введите описание изображения здесь

И, наконец, Почему это необходимо, чтобы сделать изображение слева от последнего EditText?

Спасибо =)

У меня есть два EditText, и я хочу, чтобы изображение отображалось слева от каждого EditText. Когда я пытаюсь это сделать, я получаю следующий результат (редактор Eclipse): […] Во-первых, почему это не работает?

RelativeLayout сделает что-то вроде этого:

  • Получите первый элемент, EditText который установлен для заполнения ширины родительского элемента (и будет размещен, начиная с верхнего левого угла (по умолчанию в RelativeLayout )), он в основном заполняет всю ширину экрана
  • Получите ImageView , расположенный слева от EditText , но по мере того, как EditText помещается для начала с левого края экрана, и он заполняет весь экран, ImageView будет помещен слева от EditText за пределами видимой области экрана

Один из способов позиционирования просмотров, как вы хотите, будет:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="35dp" android:background="#010101" android:gravity="center_horizontal" android:orientation="vertical" > <ImageView android:id="@+id/login_car_icon" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/user" /> <EditText android:id="@+id/login_carNumber" style="@style/EditTextDark" android:layout_toRightOf="@id/login_car_icon" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/prompt_carNumber" android:inputType="phone" android:textAppearance="?android:attr/textAppearanceMedium" android:textCursorDrawable="@null" > <requestFocus /> </EditText> <EditText android:id="@+id/login_password" style="@style/EditTextDark" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/login_carNumber" android:layout_alignLeft="@id/login_carNumber" android:layout_marginTop="10dp" android:hint="@string/prompt_password" android:inputType="phone" android:textAppearance="?android:attr/textAppearanceMedium" android:textCursorDrawable="@null" > </EditText> <ImageView android:id="@+id/login_lock_icon" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/lock" android:layout_alignTop="@id/login_password" /> </RelativeLayout> 

Второй вопрос; Почему изображение «padlock» поверх первого изображения, а не прямо слева от второго EditText?

RelativeLayout поместит своих детей (без правил, установленных на них), начиная с верхней левой части экрана. Если у вас нет правил, вы в конечном итоге ставите детей.

И, наконец, Почему это необходимо, чтобы сделать изображение слева от последнего EditText?

Это не взломать. Вы должны сказать RelativeLayout что вторая позиция ImageView находится ниже первого ImageView .

Попробуйте этот код. Этот макет отображения, как показано на изображении.

Это работа для вас.

Введите описание изображения здесь

 <?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="wrap_content" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="35dp" android:background="#010101" android:gravity="center_horizontal" android:orientation="vertical" > <EditText android:id="@+id/login_carNumber" style="@style/EditTextDark" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/prompt_carNumber" android:inputType="phone" android:textAppearance="?android:attr/textAppearanceMedium" android:textCursorDrawable="@null" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_toRightOf="@+id/login_car_icon" > <requestFocus /> </EditText> <ImageView android:id="@+id/login_car_icon" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/user" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" /> <EditText android:id="@+id/login_password" style="@style/EditTextDark" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:hint="@string/prompt_password" android:inputType="phone" android:textAppearance="?android:attr/textAppearanceMedium" android:textCursorDrawable="@null" android:layout_toRightOf="@+id/login_lock_icon" android:layout_below="@+id/login_car_icon" > </EditText> <ImageView android:id="@+id/login_lock_icon" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/lock" android:layout_below="@+id/login_car_icon" /> </RelativeLayout> 

Логическим подходом было бы сначала загрузить изображения, а затем загрузить правые текстовые виджеты справа от них.