wake-up-neo.com

Android ListView-Textfarbe

Ich versuche, ListView textColor auf Schwarz zu setzen, da ich einen weißen Hintergrund verwende.

Hier ist meine 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));

    }
}

und mein 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>

Ich bekomme den Hintergrund weiß, weiß aber nicht, wo ich den Vordergrund auf Schwarz setzen soll. Ich habe es in der XML probiert und es sieht so aus, als ob es nicht hilft.

48
Harsha M V

Ok, hier sind einige Dinge, über die Sie sich im Klaren sein sollten:

  1. Die Hintergrundfarbe, die Sie in Ihrer XML-Datei einstellen, bezieht sich auf die Aktivität und nicht auf die ListItems, die Sie definieren möchten.
  2. Jedes Listenelement verfügt über eine eigene Layoutdatei, die übergeben oder aufgeblasen werden soll, falls Sie ein komplexes Layout für das Listenelement verwenden.

Ich versuche das mit einem Codebeispiel zu erklären:

**** Beginnen wir mit dem ListItems-Layout **: Speichern Sie es in Ihrem res/layout-Ordner Ihres Android-Projekts mit say ** 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>

Nun, ein einfaches Layout mit einer TextView, um genau zu sein. Sie müssen TextView eine ID zugewiesen haben, um diese verwenden zu können.

Kommen Sie nun zu Ihrem Bildschirm-/Aktivitäts-/Chef-Layout. Wie ich bereits sagte, definieren Sie den Hintergrund für Ihren Bildschirm mit dem Android:background-Attribut. Ich sehe, Sie haben auch dort ein TextView definiert, und ich vermute, Sie versuchen, Inhalt/Listenelement dort zu definieren, was überhaupt nicht benötigt wird.

Hier ist dein bearbeitetes Layout:

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

Und vor allem, setzen Sie Ihren Adapter. 

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

Beachten Sie die Layout-Ressource, die wir an den Adapter R.layout.list_black_text übergeben, und R.id.list_content, die von uns deklarierte TextView-ID. Ich habe auch ArrayAdapter in String geändert, da es generisch ist.

Ich hoffe das erklärt alles. Markieren Sie meine Antwort als akzeptiert, wenn Sie damit einverstanden sind.

Unordentlich aber ein guter schneller Weg
Sie können dies auch mit einer schnellen Korrektur tun, wenn Sie nicht mit der Definition komplexer Layouts fortfahren möchten.

Wenn Sie den Adapter instanziieren, deklarieren Sie dazu eine innere Klasse, hier das Codebeispiel:

    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. Erstellen Sie beispielsweise eine Stildatei: my_styles.xml und speichern Sie sie in res/values.
  2. Fügen Sie den folgenden Code hinzu:

    <?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. Fügen Sie Ihrer Activity-Definition Ihren Stil als AndroidManifest.xml-Attribut in Ihr Android:theme hinzu, und weisen Sie den Namen des von Ihnen erstellten Stils als Wert zu. Zum Beispiel: 

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

HINWEIS: Der Widget.ListView kommt von hier . Überprüfen Sie auch das

21
silver_mx

Ich habe den simple_list_item_1 (Alt + Klick) geklont und die Kopie in meinem res/layout-Ordner abgelegt und in list_white_text.xml umbenannt.

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

Der Android:textColor="@color/abc_primary_text_material_dark" wird auf meinem Gerät in Weiß übersetzt.

dann im Java-Code:

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

Sie müssen die Textfarbe im Layout * simple_list_item_1 * definieren, das das Layout jedes Ihrer Elemente definiert.

Sie legen die Hintergrundfarbe des LinearLayout und nicht der ListView fest. Die Hintergrundfarbe der untergeordneten Elemente des LinearLayout ist standardmäßig (in den meisten Fällen) transparent.

Und Sie legen die schwarze Textfarbe für die TextView fest, die nicht Teil Ihrer ListView ist. Hierbei handelt es sich um ein eigenes Element (untergeordnetes Element des LinearLayout).

3
user432219

verwenden Sie niemals getApplicationContext(). Verwenden Sie einfach Ihre Aktivität als Kontext. Sehen Sie, ob das hilft.

Bitte überprüfen Sie hier: CommonsWare Antworten

0
john vuong

wenn Sie Ihren Aktivitätsstil nicht festgelegt haben, zeigt er Ihnen schwarzen Hintergrund. Wenn Sie Änderungen vornehmen möchten, z. B. weißer Hintergrund, schwarzer Text der Listenansicht, ist dies ein schwieriger Prozess.

ADD Android: theme = "@ style/AppTheme" in Android Manifest

0
Haseeb Pervaiz