2011-03-23 12 views
1

J'ai une liste simple qui est créée avec un Array Adapter et ArrayList;Changer la couleur du texte dans ListView

Est-il possible d'accéder à une certaine ligne dans la vue de liste, puis de modifier la couleur du texte de la vue de texte qui se trouve dans cette ligne dans la vue de liste?

Je sais comment changer la couleur du texte d'un textview mais je vais avoir des problèmes pour accéder à la vue de texte qui est à l'intérieur de la vue de la liste

Répondre

12

Si vous regardez la source pour simple_list_item_1, vous verrez que c'est juste un TextView. La source est:

<sdk-dir>/platforms/<your-platform>/data/res/layout/simple_list_item_1 

Le superclasse ArrayAdapter retournera que TextView dans sa méthode getView. Cela signifie que vous pouvez sous-classer ArrayAdapter, et à l'intérieur de la méthode getView de votre sous-classe, vous pouvez simplement chaîner à la superclasse, afficher la View à TextView, et faire votre chose. Par exemple, si vous vouliez régler les trois premiers articles dans votre liste textSize 24 et le reste à 14, vous pouvez effectuer les opérations suivantes:

public View getView(int position, View convertView, ViewGroup parent) { 
    TextView tv = (TextView) super.getView(position, convertView, parent); 

    if (position < 3) { 
    tv.setTextSize(24.0f); 
    } else { 
    tv.setTextSize(14.0f); 
    } 
    return tv; 
} 

Si vous utilisez une vue plus compliqué que simple_list_item_1, vous pouvez déterminez l'ID des éléments sur la vue en examinant la source, puis appelez findViewById sur la vue renvoyée par la superclasse. Par exemple, two_line_list_item.xml a TextViews avec ids de android.R.id.text1 et android.R.id.text2, donc vous devriez être en mesure d'obtenir une poignée sur eux comme suit:

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = super.getView(position, convertView, parent); 
    TextView tv1 = (TextView)v.findViewById(android.R.id.text1); 
    TextView tv2 = (TextView)v.findViewById(android.R.id.text2); 

    //do what you want with the TextViews 
} 
1

Avec un élément de la liste personnalisée, dans vos adaptateurs méthode getView vous pouvez changer la couleur du texte facilement en appelant findViewById(R.id.myText), puis en appelant setTextColor. En fait, vous pouvez le faire avec les éléments de la liste intégrée, vous auriez juste besoin de connaître l'ID du TextView ... ce que je ne sais pas, mais vous devriez être capable de le trouver assez facilement.

Pour le modifier en XML, voir Applying Styles and Themes pour modifier la couleur du texte si vous utilisez un élément ListView standard.

+0

Il n'y a donc aucun moyen de le faire dans le fichier java? J'allais le changer dynamiquement en fonction de certaines valeurs d'entrée – au789

+0

Avec un élément de liste personnalisé, dans la méthode 'getView' de vos adaptateurs, vous pouvez facilement changer la couleur du texte en appelant' findViewById (R.id.myText) ', puis en appelant' setTextColor '. En fait, vous pouvez le faire avec les éléments de liste intégrés, vous auriez juste besoin de connaître le 'ID 'du TextView. –

+0

donc vous dites que ce n'est pas possible avec la liste de tableau et l'adaptateur de tableau. si je veux atteindre les résultats je devrais faire un article de liste personnalisé? – au789

Questions connexes