您的位置:首页 > 移动开发 > Android开发

Android中设置ListView的选中的Item的背景颜色【简单模式】

2014-05-14 10:48 609 查看
ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的

这篇是我转载的一篇文章,通过listview的setOnItemClickListener来设定一个position来保证getView中的position和当前点击的position是同一个position。。下一篇我通过一个demo来演示不通过setOnItemClickListener而是通过在getView中对属性值的操作来实现

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

<?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则显示背景颜色,如果不是则不显示背景颜色。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: