2010-12-26 24 views
43

Sto provando a impostare ListView textColor su nero, poiché sto usando uno sfondo bianco.Colore testo ListView Android

Ecco il mio 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)); 

    } 
} 

e la mia 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> 

sto diventando lo sfondo il bianco, ma non sono sicuro dove impostare in primo piano a nero. Ho provato l'xml e sembra che non stia aiutando.

risposta

135

Ok, qui ci sono alcune cose che si dovrebbe essere su chiara:

  1. Il colore di sfondo che si sta configurando nel file XML è l'attività e non dei ListItems si sta tentando di definire.
  2. Ogni voce di elenco ha il proprio file di layout che deve essere passato o gonfiato nel caso in cui si stia utilizzando un layout complesso per la voce di elenco.

cercherò di spiegare questo con un esempio di codice:

**** Iniziamo con il layout ListItems ** : salvatelo nella cartella res/layout di voi progetto Android con dire ** 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> 

Beh, un layout semplice, con un TextView per essere precisi. È necessario disporre di un ID assegnato a TextView per poterlo utilizzare.

Ora viene visualizzato lo schermo/attività/layout principale, come ho detto che stai definendo lo sfondo del tuo schermo con l'attributo android:background. Vedo che hai definito anche un TextView e sospetto che tu stia cercando di definire il contenuto/l'elemento della lista lì, che non è affatto necessario.

Ecco il layout modificato:

<?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> 

E, infine, cosa più importante, impostare l'adattatore.

setListAdapter(new ArrayAdapter<String>(
      this, R.layout.list_black_text, R.id.list_content, listItems)); 

Avviso la risorsa di layout che stiamo passando all'adattatore R.layout.list_black_text, e R.id.list_content che è TextView ID abbiamo dichiarato. Ho anche cambiato ArrayAdapter in String perché è generico.

Spero che questo spieghi tutto. Segna la mia risposta accettata se sei d'accordo.

disordinato, ma un buon modo soluzione rapida
Si può anche fare questo con una soluzione rapida se non si vuole andare avanti con il layout complesso definire ecc

Mentre istanziare l'adattatore dichiarano una classe interna per fare questo, ecco il codice di esempio:

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); 
+0

Grazie mille amico. Non ho mai saputo che esisteva un file xml separato per ListView –

+0

Questo mi dà l'errore: ArrayAdapter richiede che l'ID risorsa sia un TextView. Come sei riuscito a far funzionare tutto questo senza scrivere il tuo adattatore? – odiggity

+0

@odiggity, usa il costruttore di 4 argomenti invece di un 3. se lo stai già facendo allora il terzo argomento in 4 arg costruttore è un riferimento di id alla textview descritta nel tuo layout di lista, in breve R.id.list_content nel mio esempio è id che si riferisce a textview nel mio layout di voce di elenco specificato con R.layout.list_black_text – Shardul

3

È necessario definire il colore del testo nel layout * simple_list_item_1 * che definisce il layout di ciascun elemento.

Si imposta il colore di sfondo di LinearLayout e non di ListView. Il colore di sfondo degli elementi secondari di LinearLayout è trasparente per impostazione predefinita (nella maggior parte dei casi).

E si imposta il colore del testo nero per il TextView che non fa parte di ListView. È un oggetto proprio (elemento secondario del LinearLayout) qui.

21
  1. Creare un file di stili, per esempio: my_styles.xml e salvarlo in res/values.
  2. Aggiungere il seguente codice:

    <?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. Aggiungi il tuo stile al vostro Activity definizione nel vostro AndroidManifest.xml come android:theme attributo e assegnare come valore il nome dello stile si è creato. Per esempio:

    <activity android:name="your.activityClass" android:theme="@style/ListFont"> 
    

NOTA: il Widget.ListView proviene da here. Controlla anche this.

+1

Ho provato questo e sta cambiando il colore della barra del titolo, non il colore dell'elemento della lista. – mdegges

+0

è fantastico, mi piace ... perché sto aggiungendo dinamicamente gli oggetti in listview. Non ho richiesto di definire alcuna visualizzazione del testo .... –

+0

Non funziona per me –

0

non utilizzare mai getApplicationContext(). Usa la tua attività come contesto. Vedi se questo aiuta.

pregati di controllare: CommonsWare answers

6

ho clonato il simple_list_item_1 (Alt + clic) e posto la copia sulla mia cartella res/layout, rinominato a list_white_text.xml con questo contenuto:

<?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" /> 

I android:textColor="@color/abc_primary_text_material_dark" traduce al bianco sul mio dispositivo.

poi nel codice java:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_white_text, myList); 
-2

È possibile farlo nel codice:

final ListView lv = (ListView) convertView.findViewById(R.id.list_view); 

for (int i = 0; i < lv.getChildCount(); i++) { 
    ((TextView)lv.getChildAt(i)).setTextColor(getResources().getColor(R.color.black)); 
} 
0

se didnot impostato il tuo stile di attività vi mostra sfondo nero .se si vuole fare modifiche come sfondo bianco, testo nero di listview, quindi è un processo difficile.

ADDandroid: theme = "@ stile/AppTheme"in Android Manifest.

+0

Richiede la modifica – Billa