J'ai un ListActivity et j'affiche une liste avec:
setListAdapter(new ArrayAdapter<String>(getApplicationContext(),
Android.R.layout.simple_list_item_single_choice, mStringList));
Par défaut, la couleur du texte des éléments de la liste est blanche. Je souhaite modifier la couleur du texte des vues de texte de la liste en noir.
Comment devrais-je le faire?
Une autre méthode la plus simple consiste à créer un fichier de mise en page contenant la vue de texte souhaitée avec textSize, textStyle, couleur, etc., que vous préférez, puis à l’utiliser avec ArrayAdapter.
par exemple. mytextview.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/tv"
Android:textColor="@color/font_content"
Android:padding="5sp"
Android:layout_width="fill_parent"
Android:background="@drawable/rectgrad"
Android:singleLine="true"
Android:gravity="center"
Android:layout_height="fill_parent"/>
puis utilisez-le avec votre ArrayAdapter comme d'habitude, comme
ListView lst = new ListView(context);
String[] arr = {"Item 1","Item 2"};
ArrayAdapter<String> ad = new ArrayAdapter<String>(context,R.layout.mytextview,arr);
lst.setAdapter(ad);
De cette façon, vous n'aurez pas besoin de créer un adaptateur personnalisé pour cela.
Je me rends compte que cette question est un peu ancienne mais voici une solution très simple qui manquait . Vous n'avez pas besoin de créer un ListView personnalisé ni même une présentation personnalisée.
Créez simplement une sous-classe anonyme de ArrayAdapter et substituez getView (). Laissez super.getView () gérer tout le travail lourd. Puisque simple_list_item_1 est simplement une vue de texte, vous pouvez la personnaliser (par exemple, définir textColor), puis la renvoyer.
Voici un exemple d'une de mes applications. J'affiche une liste d'emplacements récents et je souhaite que toutes les occurrences de "Emplacement actuel" soient en bleu et le reste en blanc.
ListView listView = (ListView) this.findViewById(R.id.listView);
listView.setAdapter(new ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, MobileMuni.getBookmarkStore().getRecentLocations()) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) super.getView(position, convertView, parent);
String currentLocation = RouteFinderBookmarksActivity.this.getResources().getString(R.string.Current_Location);
int textColor = textView.getText().toString().equals(currentLocation) ? R.color.holo_blue : R.color.text_color_btn_holo_dark;
textView.setTextColor(RouteFinderBookmarksActivity.this.getResources().getColor(textColor));
return textView;
}
});
Vous venez de remplacer la méthode getView
de ArrayAdapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),
Android.R.layout.simple_list_item_1, mStringList) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView text = (TextView) view.findViewById(Android.R.id.text1);
text.setTextColor(Color.BLACK);
return view;
}
};
Le moyen le plus simple de faire cela sans avoir besoin de créer quoi que ce soit d’autre serait de modifier simplement la liste TextView
:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
Android.R.layout.simple_list_item_1, Android.R.id.text1, strings) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) super.getView(position, convertView, parent);
textView.setTextColor({YourColorHere});
return textView;
}
};
En Word "simple, vous ne pouvez pas le faire avec setListAdapter". vous devez utiliser une liste personnalisée pour modifier librement la couleur du texte ou toute autre vue.
vous pouvez utiliser la méthode setTextColor (int) ou ajouter un style pour modifier la couleur du texte.
<style name="ReviewScreenKbbViewMoreStyle">
<item name="Android:textColor">#2F2E86</item>
<item name="Android:textStyle">bold</item>
<item name="Android:textSize">10dip</item>
Je suis aussi confronté à cette situation. Vous pouvez gérer la méthode ci-dessus. mais simple si vous passez simple_dropdown_item_1line en tant que ressource. Ce sera un texte de couleur noire par défaut.
C'est mon code que j'ai réalisé dans ce genre de situation.
ArrayAdapter<String> arrAdapter =
new ArrayAdapter<String>(context,Android.R.layout.simple_dropdown_item_1line,countryList);
listView.setAdapter(arrAdapter);
Votre code ci-dessous:
setListAdapter(new ArrayAdapter<String>(getApplicationContext(),
Android.R.layout.simple_dropdown_item_1line, mStringList));
En réalité, Android.R.layout.simple_dropdown_item_1line est utilisé pour la liste déroulante. Je vous exhorte à voir ce contenu de mise en page une fois. C'est juste textview simple. c'est tout. Sa propriété n'affectera pas votre tâche. J'ai vérifié que cela fonctionne bien.
Si vous voulez conserver tout le style mais changer quelques détails, vous pouvez utiliser le style par défaut défini sur Android et changer ce que vous voulez.
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceListItemSmall"
Android:gravity="center_vertical"
Android:textColor="@Android:color/background_light"
Android:paddingStart="?android:attr/listPreferredItemPaddingStart"
Android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
Android:background="?android:attr/activatedBackgroundIndicator"
Android:minHeight="?android:attr/listPreferredItemHeightSmall" />
Puis définissez l'adaptateur en utilisant:
setListAdapter(new ArrayAdapter<String>(getApplicationContext(),
R.layout.list_item_custom, mStringList));
Si vous créez une classe qui étend un adaptateur, vous pouvez utiliser la variable parent pour obtenir le contexte.
public class MyAdapter extends ArrayAdapter<String> {
private Context context;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
context = parent.getContext();
context.getResources().getColor(R.color.red);
return convertView;
}
}
Vous pouvez faire la même chose avec RecyclerView.Adapter, mais au lieu de getview (), vous utiliserez onCreateViewHolder ().
Essayez ce code au lieu de Android.r.layout.simple_list_item_single_choice
créez votre propre mise en page:
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:checkMark="?android:attr/listChoiceIndicatorSingle"
Android:gravity="center_vertical"
Android:padding="5dip"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:textColor="@Android:color/black"
Android:textStyle="bold">
</CheckedTextView>
Créez un fichier xml dans res/values et copiez le code ci-dessous
<style name="BlackText">
<item name="Android:textColor">#000000</item>
</style>
et spécifiez le style en activité dans Manifest comme ci-dessous
Android:theme="@style/BlackText"