1

カスタムリストビューを作成しました。各行は私のファイルcustom_row.xmlのように見えます。行ごとに異なる背景色を個別に設定する方法はありますか(行の値が異なるため、設定する必要があります)。

アイデアをありがとう

4

3 に答える 3

2

custom_row.xmlをインフレートした後にgetViewメソッドでカスタムリストビューを実行しているため、inflateメソッドの戻りビューの背景を変更します。以下のサンプルスニペットを参照してください。

public getView(int position, View convertView, ViewGroup parent) {
       convertView = getLayoutInflater().inflate(R.layout.custom_xml, null);
       do some stuff...

       //let say you have an arraylist of color
       convertView.setBackgroundColor(arraylist.get(position));

       //in case that your color is limited, just re-use your color again
       //and some logic how to re-use the colors.
}
于 2012-04-18T16:52:03.030 に答える
1

ここで他の回答を使用すると、セレクターが正しく機能しなくなり、セレクターは行の強調表示を完全に停止しました。受け入れられた回答で説明されているように手動で色を設定することにより、セレクターはスクロール中に行の強調表示を停止しました。それでは、セレクターを台無しにしないソリューションについて説明しましょう。

この記事では、これを透明性で修正する方法について説明していますが、実際に機能させることはできませんでした。したがって、私にとっての解決策は、ドローアブルフォルダーに2つのリストセレクターがあることでした。このようにして、実行時に2つの異なる背景色を設定し、セレクターを機能させ続けることができます。

濃い灰色の線のlist_selector_darkgrey.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/gradient_bg_darkgrey" android:state_pressed="false" android:state_selected="false"/>
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="true"/>
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="false" android:state_selected="true"/>
</selector>

薄い灰色の線の場合はlist_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/gradient_bg" android:state_pressed="false" android:state_selected="false"/>
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="true"/>
<item android:drawable="@drawable/gradient_bg_hover" android:state_pressed="false" android:state_selected="true"/>
</selector>

ドローアブルのグラデーションは無視してください。自分の色に置き換えることができます。

BaseAdapterクラスで、setBackgroundResourceを呼び出して、一部の行を明るい灰色で表示し、他の行を暗い灰色で表示します。セレクターの色は同じで、XMLファイルで定義されています。

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;

    if (convertView == null)
        vi = inflater.inflate(R.layout.list_row, null);

             ... some logic ...

    if (... some condition ...) {
        vi.setBackgroundResource(R.drawable.list_selector_darkgrey);
    }
    else { 
        vi.setBackgroundResource(R.drawable.list_selector);
    }
    return vi;
}
于 2012-11-04T05:46:12.520 に答える
1

アダプタでは、getViewメソッドを使用してビューを取得するときに、ビューの背景色を手動で設定できます。

    // set the background to green
    v.setBackgroundColor(Color.GREEN);
于 2012-04-18T16:34:04.033 に答える