web-dev-qa-db-fra.com

Android ListView Couleur du texte

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.

48
Harsha M V

Ok, voici quelques points sur lesquels vous devez être clair:

  1. La couleur d'arrière-plan que vous définissez dans votre fichier XML correspond à l'activité et non aux éléments de liste que vous tentez de définir.
  2. Chaque élément de la liste a son propre fichier de présentation qui doit être transmis ou gonflé au cas où vous utiliseriez une présentation complexe pour un élément de la liste.

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);
142
Shardul
  1. Créez un fichier de styles, par exemple: my_styles.xml et enregistrez-le dans res/values.
  2. 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>
    
  3. 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

21
silver_mx

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);
8
aldux

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.

3
user432219

ne jamais utiliser getApplicationContext(). Utilisez simplement votre activité comme contexte. Voyez si cela aide.

Veuillez vérifier ici: CommonsWare answers

0
john vuong

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

0
Haseeb Pervaiz