2010-11-05 4 views
3


J'ai besoin de créer un fichier XML avec le contenu suivant:
* Deux TextViews avec texte variable (1 à 3 lignes), un TextView sous l'autre.
* Un ImageView à droite des 2 TextViews, centré verticalement, 30x30 px.Comment garantir l'espace pour un ImageView, éviter qu'il ne rétrécisse?

Une limitation majeure est qu'il ne peut pas prendre l'écran entier lorsqu'il est gonflé dans un PopupWindow, ce qui signifie que je ne peux pas utiliser les attributs fill_parent dans de nombreux endroits.

J'ai essayé beaucoup de mises en page différentes, mais ImageView continue d'être repoussé par les TextViews lorsque le texte est long. Lorsque le texte est «à moitié long», l'image devient minuscule mais reste visible. Je veux qu'il soit toujours 30x30 px, le texte peut envelopper et utiliser une autre ligne à la place.

J'ai essayé de spécifier des valeurs pour width et minWidth. Aussi essayé layout_weight = "1" pour le ImageView. Également essayé d'encapsuler le ImageView dans un LinearLayout et donnez-lui le paramètre layout_weight = "1". Rien ne fonctionne .. S'il vous plaît aidez, ça devient frustrant!

Voici un exemple de ce qui ne fonctionne pas:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" android:layout_height="wrap_content"> 

    <LinearLayout android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:orientation="vertical"> 

     <TextView android:id="@+id/popupTitle" android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

     <TextView android:id="@+id/popupContent" 
     android:layout_width="wrap_content" android:layout_height="wrap_content"/> 
    </LinearLayout> 

    <ImageView android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:src="@drawable/img_30x30_px" /> 
</LinearLayout> 

Merci !!

+2

Vous pourriez avoir plus de chance avec un RelativeLayout –

+0

Quelle est la largeur et la hauteur maximum le ImageView peut prendre? Il serait utile si vous pouviez simuler le résultat que vous attendiez. –

Répondre

3

J'ai eu un problème similaire et j'ai trouvé que la disposition TableView a fonctionné pour moi. Il a fallu un certain temps, mais vous pouvez jouer avec les proeprties des colonnes d'étirement et de strink pour changer le comportement de l'expansion des colonnes pour qu'elles correspondent à leur contenu.

Notez que vous devriez être en mesure de définir le linearLayout de votre texte à fill_parent (pour remplir l'espace de la colonne).

Lisez ceci sur la façon dont fonctionne TableRow http://developer.android.com/resources/tutorials/views/hello-tablelayout.html

<TableRow> 
    <!-- Column 1 --> 
    <LinearLayout android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:orientation="vertical"> 

      <TextView 
       android:layout_column="1" 
       android:text="Open..." 
       android:padding="3dip" /> 
      <TextView 
       android:text="Ctrl-O" 
       android:gravity="right" 
       android:padding="3dip" /> 
    </LinearLayout> 
    <!-- Column 2 --> 
    <ImageView android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:src="@drawable/img_30x30_px" /> 
</TableRow> 

(peur que je ne suis pas sur une machine avec Android, donc je ne pouvais pas tester le code ci-dessus).

0

Merci beaucoup Emile! Ça marche! Tu as fait mon week-end! :)

je devais essayer tout de suite (althought c'est vendredi soir), et voici ce que mon xml ressemble maintenant:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" android:layout_height="wrap_content" 
android:shrinkColumns="0"> 

<TableRow> 
<!-- Column 1 --> 
<LinearLayout android:layout_width="fill_parent" 
android:layout_height="wrap_content" android:orientation="vertical"> 

    <TextView android:id="@+id/popupTitle" 
    android:layout_width="wrap_content" android:layout_height="wrap_content"/> 

    <TextView android:id="@+id/popupContent" 
    android:layout_width="wrap_content" android:layout_height="wrap_content" /> 
    </LinearLayout> 

    <!-- Column 2 --> 
    <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" android:src="@drawable/img_30x30_px" /> 

</TableRow> 
</TableLayout> 
+1

Veuillez définir ma réponse comme la bonne réponse afin que les autres puissent voir que votre question a été répondue. Merci – Emile

Questions connexes