ListView中沒有預設的選擇顔色,隻有選擇Item後的焦點顔色,滑鼠點選時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="#000000"(即不顯示背景顔色)
2、配置用于ListView顯示Item的button_layout.xml

<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>
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();
public Object getItem(int position) {
return arrayList.get(position);
public long getItemId(int position) {
return position;
public void setSelectedPosition(int position) {
selectedPosition = position;
public View getView(int position, View convertView, ViewGroup parent) {
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則顯示背景顔色,如果不是則不顯示背景顔色。
http://longyi-java.iteye.com/blog/976067