2010-08-14 7 views
6

Je suis en train de faire une listview qui ressemble à ceci: alt text http://pici.se/pictures/hjFksZvLx.jpgAligner à droite et à gauche avec linéaire ou relativelayout avec du texte tronqué?

Il comporte deux parties, la gauche est aligné à gauche et contient deux textviews qui sont une seule ligne et tronquée. Le droit fait partie a aussi deux textviews mais ils sont alignés à droite et ont une taille constante. Le problème principal est que la partie droite ne s'aligne pas à droite. Si j'utilise une largeur statique pour le pousser vers la droite, cela fonctionne plutôt bien, mais cela ne semble pas très bien en mode paysage.

Je pensais que cela devrait être simple à accomplir. Mais ce n'était pas le cas.

D'abord j'ai essayé avec LinearLayout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:id="@+id/L1" 
     android:layout_height="fill_parent" 
     android:layout_weight="0.8" 
     android:layout_width="0dip"> 
     <TextView 
      android:id="@+id/text1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:lines="1" 
      android:ellipsize="end" 
      android:scrollHorizontally="true" 
      android:text="Long text Long text Long text Long text Long text Long text Long text" /> 
     <TextView 
      android:id="@+id/text2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:lines="1" 
      android:ellipsize="end" 
      android:scrollHorizontally="true" 
      android:text="Short text" /> 
    </LinearLayout> 
    <LinearLayout 
     android:orientation="vertical" 
     android:id="@+id/L2" 
     android:layout_gravity="top|right" 
     android:layout_height="fill_parent" 
     android:layout_weight="0.2" 
     android:layout_width="0dip"> 
     <TextView 
      android:id="@+id/text4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:text="12:12" /> 
     <TextView 
      android:id="@+id/text3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="64%" 
      android:layout_gravity="right" /> 
    </LinearLayout> 
</LinearLayout> 

Je tripotage avec la propriété de poids, mais il ne semble pas aider. La partie droite ne s'aligne pas du tout sur la droite.

Et puis j'ai essayé avec Relativelayout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"> 
    <TextView 
     android:id="@+id/text1" 
     android:layout_height="wrap_content" 
     android:lines="1" 
     android:scrollHorizontally="true" 
     android:layout_alignParentTop="true" 
     android:text="Long text Long text Long text Long text Long text Long text Long text" 
     android:layout_alignParentLeft="true" 
     android:ellipsize="end" 
     android:layout_width="275dp" /> 
    <TextView 
     android:id="@+id/text2" 
     android:layout_height="wrap_content" 
     android:lines="1" 
     android:ellipsize="end" 
     android:scrollHorizontally="true" 
     android:text="Long text Long text Long text Long text Long text Long text Long text" 
     android:layout_below="@+id/text1" 
     android:layout_alignParentLeft="true" 
     android:layout_width="275dp" /> 
    <TextView 
     android:id="@+id/text3" 
     android:layout_height="wrap_content" 
     android:text="12:12" 
     android:layout_gravity="right" 
     android:layout_alignParentRight="true" 
     android:layout_alignBaseline="@+id/text1" 
     android:layout_width="40dp" 
     android:layout_alignRight="@+id/text4" /> 
    <TextView 
     android:id="@+id/text4" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:text="64%" 
     android:layout_alignParentRight="true" 
     android:layout_alignBaseline="@+id/text2" 
     android:layout_width="40dp" /> 
</RelativeLayout> 

Même problème ici, la partie droite n'aligne à droite correctement, et je dois utiliser une taille statique d'Android: layout_width pour le pousser à l'autre côté. Et si vous n'utilisez pas de taille statique, le texte commence à se couper les uns les autres.

Répondre

9

J'ai le même problème que vous il y a quelques jours. Quelques points:

  • Je l'ai utilisé android:singleLine="true" au lieu de android:lines="1". Honnêtement, je ne connais pas la différence. Je suppose qu'une fois est obsolète.

  • Pour aligner à droite: android:gravity="right"

  • Pour éviter le chevauchement j'ai placé vos TextViews à gauche dans un LinearLayout et j'ajouter android:layout_marginRight="50dp"

Mon xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"> 

    <LinearLayout android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:orientation="vertical" 
    android:layout_marginRight="50dp"> 

     <TextView 
      android:id="@+id/text1" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:scrollHorizontally="true" 
      android:layout_alignParentTop="true" 
      android:text="Long text Long text Long text Long text Long text Long text Long text" 
      android:layout_alignParentLeft="true" 
      android:ellipsize="end" 
      android:layout_width="275dp" /> 
     <TextView 
      android:id="@+id/text2" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:ellipsize="end" 
      android:scrollHorizontally="true" 
      android:text="Long text Long text Long text Long text Long text Long text Long text" 
      android:layout_below="@+id/text1" 
      android:layout_alignParentLeft="true" 
      android:layout_width="275dp" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/text3" 
     android:layout_height="wrap_content" 
     android:text="12:12" 
     android:layout_gravity="right" 
     android:layout_alignParentRight="true" 
     android:layout_alignBaseline="@+id/text1" 
     android:layout_width="40dp" 
     android:layout_alignRight="@+id/text4" /> 
    <TextView 
     android:id="@+id/text4" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:text="64%" 
     android:layout_alignParentRight="true" 
     android:gravity="right" 
     android:layout_below="@id/text3" 
     android:layout_width="40dp" /> 
</RelativeLayout> 

Utiliser android:layout_marginRight="50dp" pour éviter le chevauchement ne semble pas être le bon choix, mais en ce moment, c'est la seule solution que j'ai trouvée.

+0

Merci .. J'espérais éviter une Linearlayout supplémentaire, mais c'était la seule façon de fonctionner. – droidgren

+0

Quel est le point dans l'enroulement de LinearLayout dans un RelativeLayout. LinearLayout est maintenant le seul enfant de RelativeLayout et le parent peut probablement être supprimé? –

+1

@GlennBech: Il y a plus de widgets dans le 'RelativeLayout', et pas seulement dans' LinearLayout'. – Macarse

Questions connexes