33
public class ListView extends  ListActivity {

static String item;

public void onCreate(Bundle icicle) {
            super.onCreate(icicle);

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, Str.S);
            setListAdapter(adapter);

      }

これはうまく機能する私のリストビュークラスであり、Strというクラスから文字列を取得してリストビューに表示します。問題は、リストビュースタイルが適切ではなく、文字列が白で黒になっていることです。

私はそれらを代替にしたいのですが、各行には色があります。

私は多くのチュートリアルを試しましたが、どれも十分に明確ではありませんでした..各行の代替色を作成するにはどうすればよいですか..例 行1青、行2白、行3青、行4白など。

4

4 に答える 4

97

これがその方法です。

私のサンプルコードはここに簡単に示されています:

アダプタのメソッドをオーバーライドgetViewします。

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
View view = super.getView(position, convertView, parent);  
if (position % 2 == 1) {
    view.setBackgroundColor(Color.BLUE);  
} else {
    view.setBackgroundColor(Color.CYAN);  
}

return view;  
}

ArrayAdapterそこでgetViewメソッドをオーバーライドしてオーバーライドします。

したがって、アダプタが次のようなものである場合:

public class MyAdapter extends ArrayAdapter

あなたListActivityはこのように変化します:

 ArrayAdapter<String> adapter = new MyAdapter<String>(this,
                android.R.layout.simple_list_item_1, Str.S);

ArrayAdapterのオーバーライドの例を次に示します。

于 2012-10-28T14:51:22.917 に答える
4
if (position % 2 == 0) {

    rowView.setBackgroundColor(Color.parseColor("#A4A4A4"));

} else {

    rowView.setBackgroundColor(Color.parseColor("#FFBF00"));

}
于 2016-05-19T10:43:51.933 に答える
1

カスタムリストビュー行の背景色は、次のコマンドで設定できます。

row.setBackgroundResource(R.color.list_bg_2)

のカスタムリストビューアダプタのメソッド

getView(int position, View convertView, ViewGroup parent)

私は次のような多くのことを試みましrow.setBackgroundColor(0xFF00DD)たが、それを成し遂げることができませんでした、

ここでlist_bg_2はカラーセットres/values/color.xmlです

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="list_bg_1">#ffffff</color>
    <color name="list_bg_2">#fef2e8</color>
</resources>
于 2014-12-17T05:11:33.437 に答える
0

ビューがViewGroupの場合、単純な背景設定は機能しません

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
    final int rr = (position % 2 == 0) ? R.color.border_end_1 : R.color.black;
    final int cc = getResources().getColor(rr);
    View view = super.getView(position, convertView, parent);  
    walk(view, rr, cc);
    return view;  
}
private void walk(View view, int rr, int cc){
    view.setBackgroundResource(rr);
    ViewGroup group = (ViewGroup)view;
    int nc = group.getChildCount();
    for (int i = 0; i < nc; i++) {
        final View v = group.getChildAt(i);
        if (v instanceof ViewGroup)
            walk(v, rr, cc);
        else
            v.setBackgroundColor(cc);
    }
}
于 2021-03-11T18:39:24.417 に答える