RelativeLayout pas de la manipulation “toLeftOf” et/ou toRightOf correctement

J'ai été à la recherche d'une solution pour le problème avec "toLeftOf" et "toRightOf" lors de l'utilisation de RelativeLayout, mais nai pas trouvé une vraie solution ou la bonne réponse à ce comportement:

Fondamentalement, "toLeftOf" ne fonctionne pas bien.

J'ai deux EditText, et je veux une image à afficher à gauche de chaque EditText. Quand j'essaie de le faire, j'obtiens le résultat suivant (Éclipse de l'éditeur):

RelativeLayout pas de la manipulation “toLeftOf” et/ou toRightOf correctement

Comme vous pouvez le voir, les images ne sont pas visibles. Voici le code XML utilisé:

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

Tout d'abord, pourquoi ce n'est pas de travail?

Si je change le XML, et l'utilisation "toRightOf" sur le EditTexts au lieu de "toLeftOf" sur les images, puis-je obtenir le suivi des résultats:

RelativeLayout pas de la manipulation “toLeftOf” et/ou toRightOf correctement

Comme vous pouvez le voir, les deux images sont affichées, mais ils sont "au-dessus des autres", lorsque le cadenas doit être sur le côté gauche de la deuxième EditText. Voici le 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>

Deuxième question, pourquoi le "cadenas" en image sur la première image, et non pas directement à la gauche de la seconde EditText?

Si j'ajoute la ligne suivante à la dernière ImageView (le cadenas):

android:layout_below="@+id/login_car_icon"

il est placé correctement, mais je pense que c'est un "hack" et ne devrait pas être nécessaire, à droite?

La dernière ImageView a la suite de XML de travail:

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

Résultat:

RelativeLayout pas de la manipulation “toLeftOf” et/ou toRightOf correctement

Enfin, pourquoi est-ce nécessaire pour faire de l'image, à gauche de la dernière EditText?

Merci =)

RelativeLayout des positions de son contenu à (0, 0) par défaut. Quand vous dites à disposition de quelque chose android:layout_rightOf cela va affecter l'enfant de la composante en x de coordonnées. Avec android:layout_below vous êtes à la modification de la coordonnée trop.
Merci pour cela. Il convient de préciser claire, que "toLeftOf" n'affecte pas y, parce que je pense que la plupart des ppl pourrait s'attendre à ce qu'il affecte aussi...

OriginalL'auteur Ted | 2013-01-13