Question

J'utilise une vue de liste dans Android 1.5 pour afficher la liste des images et du texte à côté de l'image. Je suis en train de centrer verticalement le texte, mais le texte est en haut de la ligne au lieu de les centrer. Voici ma mise en page:

<?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/default_image" android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"/>

    <TextView android:id="@+id/item_title" 
        android:layout_width="wrap_content" android:layout_height="wrap_content" 
        android:layout_toRightOf="@id/item_image" 
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"
        />

</RelativeLayout>

Il semble étrange que je dois mettre alignParentTop = « true » quand je suis en train de centrer verticalement le texte, mais si je ne suis pas le texte ne montre même pas. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

EDIT suivant les commentaires:

Il se trouve faire ce travail avec RelativeLayout n'est pas facile. Au fond de la réponse que 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 décrits dans la question a eu lieu. Ceci a été corrigé par l'aide au lieu 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 ne l'ont pas. Par exemple, cette par Romain Guy dit expressément que le RelativeLayout devrait. Quand je l'ai essayé, je ne l'ai obtenu au travail tout à fait; Il est vrai que je ne le faisais pas exactement comme il l'a fait, mais mes seuls changements étaient avec quelques attributs des TextViews, qui ne devrait pas avoir fait beaucoup de différence.


Voici la réponse originale:

Je pense que vous confondez Android avec toutes ces instructions quelque peu contradictoires dans RelativeLayout. Je reformaté votre truc à 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 retiré beaucoup de votre android:layout_alignParentxxx redondante parce qu'ils ne sont pas nécessaires. Ce point de vue est maintenant avec l'image dans le coin supérieur gauche et le texte centré verticalement à côté. Si vous voulez que l'image centrée verticalement aussi bien, alors vous ne pouvez pas avoir le RelativeLayout être sur android: layout_height = « wrap_content » parce qu'il essaie de se faire pas plus grand que la hauteur de l'image. Il faudrait indiquer une hauteur, par exemple 80dp, puis définissez la ImageView à une hauteur fixe comme 60dp avec Android: scaleType = « fitXY » pour le rendre l'échelle vers le bas pour adapter correctement

.

Autres conseils

était coincé sur une question similaire pendant un certain temps, mais a trouvé cela de CommonsWare:

"Lorsque vous gonflez la mise en page, utilisez inflate(R.layout.whatever, parent, false), lorsque le parent ListView."

Works, mais uniquement lorsque vous réglez la hauteur de la ligne à une valeur spécifique (vous ne pouvez pas utiliser wrap_content).

directive de base ferait, mais simplement ImageView ne prend pas en charge l'alignement de base à partir d'aujourd'hui. Vous pouvez contourner ce problème en créant une sous-classe de ImageView, remplacer la méthode getBaseline () et retourner la hauteur de l'image.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top