1. ホーム
  2. android

[解決済み] Android ListViewの文字色

2022-02-16 18:52:58

質問

ListViewのtextColorを黒にしたいのですが、背景を白にしているため、どうすればいいですか?

以下は私の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));

    }
}

と私の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>

背景は白になるのですが、前景を黒にする場所がよくわかりません。xmlの中で試してみましたが、役に立たないようです。

解決方法を教えてください。

OK、ここではっきりさせておくべきことがあります。

  1. xml ファイルで設定している背景色は、定義しようとしている ListItems の色ではなく、アクティビティの色です。
  2. 各リストアイテムは独自のレイアウトファイルを持っており、リストアイテムに複雑なレイアウトを使用している場合は、そのファイルを渡すか、または膨らませる必要があります。

コードサンプルを使って説明します。

****ListItemsのレイアウトから始めましょう**。 に保存してください。 res/layout フォルダに、 **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>

さて、シンプルなレイアウトで TextView を正確には TextViewを使用するには、TextViewにidを割り当てる必要があります。

さて、画面/アクティビティ/チーフレイアウトの話になりますが、画面の背景を定義するために android:background 属性があります。そこにTextViewも定義されていますが、コンテンツやリスト項目を定義しようとしているのではと思いますが、それは全く必要ありません。

編集したレイアウトはこちらです。

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

そして最後に、最も重要なのは、アダプターを設定することです。

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

アダプタに渡しているレイアウトリソースに注目してください。 R.layout.list_black_textR.id.list_content で、これが宣言したTextView IDです。また、ArrayAdapterは汎用性があるので、String型に変更しています。

これですべて説明できたと思います。もしあなたが同意すれば、私の答えに受理マークを付けてください。

面倒だけど、手っ取り早い良い方法
また、複雑なレイアウト定義などを進めない場合は、クイックフィックスで行うことも可能です。

アダプタのインスタンスを作成する際に、この処理を行うためのインナークラスを宣言します。

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