2010-07-10 14 views
2

Dire que j'ai une liste de chaînes avec les éléments: « One », « Deux », « Trois », « Quatre »texte de centrage Android dans les listes

Je veux les centrer au milieu de l'écran mais je veux le faire d'une manière que le début de chaque mot soit l'un à côté de l'autre.

Comme ceci:

         One 
             Two 
             Three 
             Four 

Considérant que la police a sans doute une longueur différente par caractère, comment puis-je faire mieux dans Android?

Répondre

1

Je ne sais pas comment votre application se comporte et si un ListView est strictement nécessaire, mais l'effet que vous désirez peut être atteint en utilisant TableLayout et TableRows. TableLayout alignera les éléments dans chaque colonne pour chaque ligne comme vous l'avez décrit. Cela dit, TableLayout ne supporte pas les lignes entre les lignes ou le quadrillage (bien que j'ai l'air de hacks intelligents impliquant de changer la couleur d'arrière-plan du TableRow en noir, puis de changer la couleur de remplissage et d'arrière-plan des objets View dans la TableRow à blanc pour obtenir une ligne de séparation noire - mais cela ne fonctionne pas toujours en fonction de vos objets View). Je suis dans un cornichon similaire, et c'était la première avenue que j'ai examinée. Il n'y avait pas de solution pour ma situation, mais cela pourrait fonctionner pour vous. Et si vous trouvez un moyen d'aligner le texte dans une liste, j'aimerais en entendre parler. Je pense aussi qu'il vaut la peine de mentionner (en fonction de la progression de la conversation) que vous pouvez également définir row.setOnClickListener() et rendre une ligne entière cliquable dans TableView. Une fois que vous l'avez enveloppé dans un ScrollView, c'est comme une liste.

1

vous pouvez définir le gravity aux éléments que vous voulez être et centre pour detail

android:gravity="center_horizontal" 
+0

Ceci centre les éléments indépendamment les uns des autres. Je voudrais que leurs premières lettres soient les unes sur les autres comme dans l'exemple. – Christian

0

Il semble que vous souhaitiez placer vos éléments dans un parent avec layout_width="wrap_content" et centrer le parent entier.

Quelque chose comme ça, peut-être?

<?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" > 
    <TextView android:text="Content above..." 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <LinearLayout android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"> 
     <TextView android:text="One" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
     <TextView android:text="Two" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
     <TextView android:text="Three" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

    <TextView android:text="Content below..." 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" />  
</LinearLayout> 

Rappelez-vous la différence entre gravity et layout_gravity. L'attribut gravity fait référence au contenu de la vue. layout_gravity (et tous les autres attributs préfixés par layout_) fait référence à la disposition de la vue dans son parent.

Edit: Si vous cherchez à mettre en forme des éléments de ListView même, essayer quelque chose comme ceci que votre liste mise en page de l'article avec le ListView lui-même en utilisant layout_width="fill_parent" et layout_height="fill_parent":

<LinearLayout android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:weightSum="2" 
    android:gravity="center"> 
    <TextView android:id="@+id/text" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
</LinearLayout> 

Modifier le contenu du TextView avec l'identifiant text dans chaque élément de la liste de la manière habituelle. Le réglage minHeight tiré du thème actuel fera en sorte qu'il reste une bonne taille pour le toucher.

Le centrage uniforme dans ce cas est géré par une combinaison de weightSum et gravity sur le LinearLayout et le layout_weight sur le TextView. Le poids de TextView divisé par weightSum de son parent déterminera le pourcentage d'espace horizontal que le LinearLayout lui donnera. Dans l'exemple ci-dessus, il obtiendra la moitié de l'espace horizontal disponible, mais centré. Étant donné que ListView ne connaît jamais le contenu des éléments de liste qui ne sont pas actuellement à l'écran, il est impossible de mesurer le texte de chaque élément de votre adaptateur pour centrer parfaitement le contenu. Vous devrez l'approximer en utilisant une disposition d'élément de liste comme l'exemple ci-dessus.

+0

Cette approche a le problème que tous les éléments de la liste ne sont pas cliquables, mais la surface cliquable doit être aussi grande que possible. – Christian

+0

Ah, vous voulez des éléments ListView cliquables, pas seulement d'autres contenus. Voir les modifications. – adamp

0

envelopper votre ListView dans un LinearLayout avec layout_gravity = « center_horizontal » ou

NVM: qui ne fonctionne pas évidemment ..

Alors attendez .. Vous voulez une liste, où chaque ligne est cliquable pour toute la largeur de l'écran, et vous voulez justifier toutes les lignes à gauche, et aussi centrer tout le texte justifié sans casser la justification?