2011-06-08 4 views
0

J'essaie d'utiliser une vue vide pour indiquer la couleur de chaque élément dans un ListView. L'idée est que rowColor View est juste une ligne large 3dp qui devrait automatiquement se mettre à la hauteur de secondLine et thirdLine (notez que tout le contenu est défini dans le code, y compris la couleur d'arrière-plan de rowColor et que firstLine et thirdLine sont souvent réglés sur GONE).Android View problème de mise en page de fond

Il apparaît parfaitement dans la disposition graphique d'Eclipse mais rowColor n'apparaît pas du tout sur mon téléphone (sous 2.3.3) et toutes les vues sont empilées. Toute idée de comment résoudre ce problème?

Le code suivant pour list_row a été adopté à partir de here. J'ai fourni tout le code que je pense fonctionne en fonction de cette mise en page, mais pas même proche. Cette disposition fonctionne-t-elle toujours?

list_row.xml:

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="?android:attr/listPreferredItemHeight" 
android:padding="6dip"> 

<TextView 
    android:id="@+id/firstLine" 

    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 

    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 

    android:singleLine="true" 
    android:text="First Line" /> 

<View 
    android:id="@+id/rowColor" 
    android:background="#FF0000" 

    android:layout_width="3dp" 
    android:layout_height="fill_parent" 

    android:layout_below="@id/firstLine" 
    android:layout_alignParentBottom="true" /> 

<TextView 
    android:id="@+id/thirdLine" 

    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 

    android:layout_toRightOf="@id/rowColor" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 

    android:singleLine="true" 
    android:text="Third Line" /> 

<TextView 
    android:id="@+id/secondLine" 

    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 

    android:layout_toRightOf="@id/rowColor" 
    android:layout_alignParentRight="true" 
    android:layout_below="@id/firstLine" 
    android:layout_above="@id/thirdLine" 
    android:layout_alignWithParentIfMissing="true" 

    android:gravity="center_vertical" 
    android:singleLine="true" 
    android:text="Second Line" /> 
</RelativeLayout> 

main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<ListView 
    android:id="@+id/android:list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"/> 
</LinearLayout> 

Activité ListViewTest.java ici: http://pastie.org/2035822

Merci.

+0

Peut-être essayer "wrap_content", voir ce que cela fait – Austin

+0

Est-ce que ça se voit? ou est-il seulement manquant quand firstList est GONE – jkhouw1

+0

Eh bien rowColor n'a jamais réellement de contenu, juste une couleur de fond. Il n'apparaît pas pour wrap_content ou match_parent, ou lorsque firstLine est GONE. Je le vois seulement quand j'ai sa taille réglée à une taille de 40dp. – kevin

Répondre

0

J'ai testé votre mise en page dans plusieurs émulateurs (de 2.1 à 2.3.3) et cela fonctionne très bien, avec ou sans la définition de la première visibilité TextView pour View.GONE.

Il doit s'agir d'un problème dans votre code ailleurs ou d'un problème de votre périphérique spécifique.

Pour contourner ce problème, vous pouvez utiliser:

android:layout_height="0dp" 

pour votre rowColor View. Puisque vous définissez déjà la position des limites supérieure et inférieure avec android:layout_below="@id/firstLine" et android:layout_alignParentBottom="true", la valeur réelle de layout_height est sans importance.

+0

Comment exactement l'avez-vous testé? Comme je l'ai dit, il semble parfait dans la mise en page graphique, mais pas sur mon téléphone. Ce que j'ai posté était en fait une version simplifiée de ce que j'utilisais, mais maintenant j'ai des problèmes même pour que ça s'affiche correctement. Je vais ajouter plus de code à ma question. – kevin

+0

Je dirais d'ajouter ** moins **, ** pas plus ** code à lui. Coupez-le jusqu'à ce que vous trouviez ce qui ne va pas. J'ai collé la mise en page dans Eclipse et l'ai ajoutée à un projet fictif. Je l'ai ensuite passé à travers plusieurs émulateurs comme je l'ai dit plus haut, pas seulement la mise en page graphique dans l'EDI. – Aleadam

+0

J'espérais que vous l'aviez réellement utilisé dans un ListView.J'ai fourni le code supplémentaire qui devrait le faire fonctionner, mais ce n'est pas le cas. Des pensées? – kevin

0

Je l'ai rencontré récemment, et j'ai trouvé qu'un View sans contenu à part une couleur de fond n'apparaîtra pas dans un RelativeLayout.

Si vous le pouvez, essayez de convertir votre disposition en LinearLayout. Cela semble fonctionner pour moi.