EDIT suivant les commentaires:
Il se trouve faire ce travail avec RelativeLayout n'est pas facile. Au bas de la réponse, j'ai inclus un RelativeLayout qui donne l'effet voulu, mais seulement jusqu'à ce qu'il soit inclus dans un ListView. Après cela, les mêmes problèmes que ceux décrits dans la question se sont produits. Cela a été corrigé en utilisant à la place LinearLayout (s).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:orientation="horizontal">
<ImageView android:id="@+id/pickImageImage"
android:layout_width="100dp"
android:layout_height="80dp"
android:background="@drawable/icon"
android:scaleType="fitXY"
android:layout_marginRight="10dp"/>
<TextView android:id="@+id/pickImageText"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:gravity="left|center_vertical"
android:text="I'm the text"/>
</LinearLayout>
Si vous voulez avoir deux zones de texte, vous pouvez imbriquer un deuxième orientation="vertical"
et LinearLayout après la ImageView puis mettre les zones de texte là-dedans.
Cela fonctionne, mais je dois admettre que je ne sais pas pourquoi les RelativeLayouts n'ont pas. Par exemple, ce blog post by Romain Guy dit spécifiquement que le RelativeLayout devrait. Quand je l'ai essayé, je n'ai jamais eu assez de travail; Certes, je ne l'ai pas fait exactement comme il l'a fait, mais mes seuls changements étaient avec certains attributs des TextViews, ce qui n'aurait pas dû faire une grande différence.
voici la réponse originale:
Je pense que vous confondez Android avec toutes ces instructions quelque peu contradictoires dans RelativeLayout. J'ai reformaté votre chose à ceci:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dip">
<ImageView android:id="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dip"
android:src="@drawable/icon"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
<TextView android:id="@+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/item_image"
android:layout_centerVertical="true"
android:text="Blah!"/>
</RelativeLayout>
Et cela fonctionne très bien. J'ai supprimé plusieurs de vos android:layout_alignParentxxx
redondants car ils n'étaient pas nécessaires. Cette vue vient maintenant avec l'image dans le coin supérieur gauche et le texte verticalement centré à côté de lui. Si vous voulez que l'image soit centrée verticalement, alors vous ne pouvez pas avoir le RelativeLayout sur android: layout_height = "wrap_content" parce qu'il essaie de ne pas se faire plus grand que la hauteur de l'image. Vous devez spécifier une hauteur, par ex. 80dp, puis définissez le ImageView à une hauteur fixe comme 60dp avec android: scaleType = "fitXY" pour l'adapter à l'échelle correctement.
Merci d'avoir essayé. Je veux que la mise en page ne soit pas plus grande que l'image, donc l'image est bien.J'ai essayé votre xml, et vois la même chose que je voyais avec le mien. Le texte n'apparaît pas à moins que j'ajoute android: layout_alignParentTop = "true" au TextView, et bien sûr il est justifié au lieu de centré. Avez-vous mis le vôtre dans un ListView? –
Hmm. Cela fonctionnait bien quand il s'agissait d'une vue seule, mais quand je l'ai ajouté à un ListView alors oui, il a cessé de fonctionner. J'ai juste essayé quelques trucs et rien n'a vraiment fonctionné comme il se doit avec RelativeLayout. Vous pouvez obtenir le même résultat en utilisant un LinearLayout. Définissez l'orientation sur horizontal, puis définissez la hauteur TextView sur fill_parent avec une gravité center_vertical. Si vous voulez avoir plusieurs TextViews à côté de l'icône, vous pouvez les placer dans un second LinearLayout vertical. Ce n'est pas élégant, mais je ne peux pas comprendre pourquoi les RelativeLayouts ne fonctionnaient pas ... –
Pourriez-vous éditer votre réponse pour mentionner LinearLayout? Cela semble fonctionner. –