ListView の選択状態による背景色や文字色のメモ、
特に、BaseAdapter を使い行選択 ClickListner を設定した時に選択色表示が効かなくなるので
カスタマイズ設定する方法
(長いので2回に分けて投稿)
まずは、背景色の方、、、
リストセレクタと呼ばれるリスト行選択時の背景色を表すリソースを、
res/color の下に用意する
--- res/color/list_selector.xml の内容 ---
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false"
android:state_pressed="false"
android:drawable="@color/list_unselected" />
<item android:state_pressed="true"
android:drawable="@color/list_pressed" />
<item android:state_selected="true"
android:state_pressed="false"
android:drawable="@color/list_selected" />
</selector>
-------------------------------------------
list_selector.xml で指定する @color/xxx が指すものとして
res/values/colors.xml を用意する。
--- res/values/colors.xml の内容 ----------
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="list_unselected">#000000</color>
<color name="list_pressed">#ffa122</color>
<color name="list_selected">#ffa122</color>
</resources>
-------------------------------------------
例として、これを 任意のオブジェクトの List を ListView & BaseAdapter で表示する。
BaseAdapter の getView で返す View で、setBackgroundResource で指定する。
final List<Item> list = getList();
ListView listview = (ListView)findViewById(R.id.listView);
listview.setAdapter(new BaseAdapter(){
LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@Override
public View getView(int position, View convertView, ViewGroup parent){
View view = convertView==null ? layoutInflater.inflate(android.R.layout.simple_list_item_2, null) : convertView;
final Item item = list.get(position);
final TextView titleTextView = (TextView)view.findViewById(android.R.id.text1);
titleTextView.setText(item.get(Item.TEXT1).toString());
final TextView descriptionTextView = (TextView)view.findViewById(android.R.id.text2);
descriptionTextView.setText(item.get(Item.TEXT2).toString());
view.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
titleTextView.setSelected(false);
startActivity(new Intent(getApplicationContext(), item.getActivity() ));
}
});
view.setBackgroundResource(R.color.list_selector);
return view;
}
@Override
public long getItemId(int position){
return position;
}
@Override
public Object getItem(int position){
return list.get(position);
}
@Override
public int getCount(){
return list.size();
}
});
上の setOnClickListener で、任意の Activity を起動するサンプルだが、
このままだと、以下のように選択時に背景色の反転しかしない。
文字色はそのままである。
これを以下のようにしたい。
文字色を反転させるためには、ColorStateList を TextView に指定するが、
これが2通りある。
続きは、、
ListView の選択色や文字色のメモ(2)で。。。