AndroidでListViewの選択したItemの背景色を設定
ListViewにはデフォルトの選択色はなく、Itemを選択した後のフォーカス色だけで、マウスクリック時にItemに色があり、マウスを離すと色がなくなり、マウスを離した後の選択項目を実現する背景には色があります.
1、mainを配置する.xml
Itemの取得フォーカスカラーを白に設定するandroid:listSelector=「#00000」(背景色を表示しない)
2.ListViewにItemを表示するためのbutton_を設定するlayout.xml
3、Activityの実現
listViewのsetOnItemClickListenerイベントで今回選択したItemの下付きラベルをマーク:listAdapter.setSelectedPosition(arg2);
次にlistAdapterを呼び出します.notifyDataSetInvalidated()は、バックグラウンドにインタフェースの再リフレッシュを通知します.
ListAdapterのgetView()メソッドでは、選択したItemであれば背景色が表示され、そうでなければ背景色が表示されません.
1、mainを配置する.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">
<ListView android:id="@+id/listView" android:listSelector="#000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Itemの取得フォーカスカラーを白に設定するandroid:listSelector=「#00000」(背景色を表示しない)
2.ListViewにItemを表示するためのbutton_を設定するlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayoutButton"
android:layout_width="144px"
android:layout_height="99px"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/TextViewButton"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="20px">
</TextView>
</LinearLayout>
3、Activityの実現
package com.listButtonTest.www;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class listButtonTest extends Activity {
private ListView listView = null;
private ListAdapter listAdapter = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) this.findViewById(R.id.listView);
ArrayList<ButtonView> buttonListView = new ArrayList<ButtonView>();
ButtonView a = new ButtonView(R.string.l1);
buttonListView.add(a);
ButtonView b = new ButtonView(R.string.l2);
buttonListView.add(b);
ButtonView c = new ButtonView(R.string.l3);
buttonListView.add(c);
ButtonView d = new ButtonView(R.string.l4);
buttonListView.add(d);
ButtonView e = new ButtonView(R.string.l5);
buttonListView.add(e);
listAdapter = new ListAdapter(buttonListView);
listView.setAdapter(listAdapter);
listView.setDividerHeight(0);
listView.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
listAdapter.setSelectedPosition(arg2);
listAdapter.notifyDataSetInvalidated();
}
});
};
public class ListAdapter extends BaseAdapter {
ArrayList<ButtonView> arrayList = null;
LayoutInflater inflater;
View view;
ButtonLayoutHolder buttonLayoutHolder;
LinearLayout buttonLayout = null;
TextView buttonText = null;
private int selectedPosition = -1;//
public ListAdapter(ArrayList<ButtonView> buttonListView) {
// TODO Auto-generated constructor stub
arrayList = buttonListView;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return arrayList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return arrayList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public void setSelectedPosition(int position) {
selectedPosition = position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.button_layout, null, false);
buttonLayoutHolder = (ButtonLayoutHolder) view.getTag();
if (buttonLayoutHolder == null) {
buttonLayoutHolder = new ButtonLayoutHolder();
buttonLayoutHolder.buttonLayout = (LinearLayout) view
.findViewById(R.id.LinearLayoutButton);
buttonLayoutHolder.textView = (TextView) view
.findViewById(R.id.TextViewButton);
view.setTag(buttonLayoutHolder);
}
buttonLayout = buttonLayoutHolder.buttonLayout;
buttonText = buttonLayoutHolder.textView;
if (selectedPosition == position) {
buttonText.setSelected(true);
buttonText.setPressed(true);
buttonLayout.setBackgroundColor(Color.RED);
} else {
buttonText.setSelected(false);
buttonText.setPressed(false);
buttonLayout.setBackgroundColor(Color.TRANSPARENT);
}
buttonText.setTextColor(Color.WHITE);
buttonText.setText(arrayList.get(position).textViewId);
return view;
}
};
}
class ButtonView {
int textViewId;
ButtonView(int tId) {
textViewId = tId;
}
}
class ButtonLayoutHolder {
LinearLayout buttonLayout;
TextView textView;
}
listViewのsetOnItemClickListenerイベントで今回選択したItemの下付きラベルをマーク:listAdapter.setSelectedPosition(arg2);
次にlistAdapterを呼び出します.notifyDataSetInvalidated()は、バックグラウンドにインタフェースの再リフレッシュを通知します.
ListAdapterのgetView()メソッドでは、選択したItemであれば背景色が表示され、そうでなければ背景色が表示されません.