J'essaie de définir le ListView textColor sur noir, car j'utilise un arrière-plan blanc.
Voici mon MailActivity
public class MailActivity extends ListActivity {
String[] listItems = { "Compose", "Inbox", "Drafts", "Sent" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mails);
setListAdapter(new ArrayAdapter(this,
Android.R.layout.simple_list_item_1, listItems));
}
}
et mon 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"
Android:background="#FFFFFF">
<ListView
Android:id="@Android:id/list"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"/>
<TextView
Android:id="@Android:id/empty"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Empty set"
Android:textColor="#000000" />
</LinearLayout>
Le fond est blanc, mais je ne sais pas où placer le premier plan en noir. J'ai essayé dans le XML et on dirait que ça n'aide pas.
Ok, voici quelques points sur lesquels vous devez être clair:
Je vais essayer d'expliquer cela avec un exemple de code:
**** Commençons par la mise en page ListItems **: enregistrez-la dans votre dossier res/layout
de votre projet Android avec ** list_black_text.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Definig a container for you List Item-->
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:gravity="center_vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<!-- Defining where should text be placed. You set you text color here-->
<TextView
Android:id="@+id/list_content"
Android:textColor="#000000"
Android:gravity="center"
Android:text="sample"
Android:layout_margin="4dip"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
/>
</LinearLayout>
Eh bien, une mise en page simple avec une variable TextView
pour être précis. Vous devez avoir un identifiant attribué à TextView pour pouvoir l'utiliser.
Maintenant, en venant à votre écran/activité/mise en page principale, comme je l'ai dit, vous définissez le fond de votre écran avec l'attribut Android:background
. Je vois que vous avez également défini un TextView et je suppose que vous essayez de définir un élément de contenu/liste, ce qui n’est pas du tout nécessaire.
Voici votre mise en page modifiée:
<?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"
Android:background="#FFFFFF">
<ListView
Android:id="@Android:id/list" Android:layout_width="fill_parent"
Android:layout_height="wrap_content"/>
<!-- REMOVED TEXT VIEW, AND KEEPING BACKGROUND WHITE -->
</LinearLayout>
Et enfin, surtout, définissez votre adaptateur.
setListAdapter(new ArrayAdapter<String>(
this, R.layout.list_black_text, R.id.list_content, listItems));
Notez la ressource de présentation que nous transmettons à l'adaptateur R.layout.list_black_text
et à R.id.list_content
, qui correspond à l'ID TextView que nous avons déclaré. J'ai également changé ArrayAdapter en type String puisqu'il est générique.
J'espère que cela explique tout. Marquez ma réponse acceptée si vous êtes d'accord.
Sale mais une bonne solution rapide
Vous pouvez également le faire avec une solution rapide si vous ne voulez pas aller de l'avant avec une mise en page complexe, etc.
Lors de l'instanciation de l'adaptateur, déclarez une classe interne pour le faire, voici l'exemple de code:
ArrayAdapter<String> adapter=new ArrayAdapter<String>(
this, Android.R.layout.simple_list_item_1, listItems){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view =super.getView(position, convertView, parent);
TextView textView=(TextView) view.findViewById(Android.R.id.text1);
/*YOUR CHOICE OF COLOR*/
textView.setTextColor(Color.BLUE);
return view;
}
};
/*SET THE ADAPTER TO LISTVIEW*/
setListAdapter(adapter);
my_styles.xml
et enregistrez-le dans res/values
.Ajoutez le code suivant:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ListFont" parent="@Android:style/Widget.ListView">
<item name="Android:textColor">#FF0000</item>
<item name="Android:typeface">sans</item>
</style>
</resources>
Ajoutez votre style à votre définition Activity
dans votre AndroidManifest.xml
en tant qu'attribut Android:theme
et attribuez-lui le nom du style que vous avez créé. Par exemple:
<activity Android:name="your.activityClass" Android:theme="@style/ListFont">
NOTE: le Widget.ListView
vient de ici . Vérifiez également ceci .
J'ai cloné le simple_list_item_1
(Alt + Clic) et placé la copie sur mon dossier res/layout
, puis je l'ai renommé en list_white_text.xml
avec le contenu suivant:
<?xml version="1.0" encoding="utf-8"?>
<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="@color/abc_primary_text_material_dark"
Android:minHeight="?android:attr/listPreferredItemHeightSmall" />
Le Android:textColor="@color/abc_primary_text_material_dark"
se traduit en blanc sur mon appareil.
puis dans le code Java
:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_white_text, myList);
Vous devez définir la couleur du texte dans la présentation * simple_list_item_1 * qui définit la présentation de chacun de vos éléments.
Vous définissez la couleur d'arrière-plan de LinearLayout et non de ListView. La couleur d'arrière-plan des éléments enfants de LinearLayout est transparente par défaut (dans la plupart des cas).
Et vous définissez la couleur du texte noir pour le TextView qui ne fait pas partie de votre ListView. C'est un élément propre (élément enfant de LinearLayout) ici.
ne jamais utiliser getApplicationContext()
. Utilisez simplement votre activité comme contexte. Voyez si cela aide.
Veuillez vérifier ici: CommonsWare answers
si vous n'avez pas défini votre style d'activité, il affiche un arrière-plan noir. Si vous souhaitez apporter des modifications telles qu'un arrière-plan blanc, un texte noir de listview, le processus est difficile.
ADD Android: theme = "@ style/AppTheme" dans le manifeste Android .