android中设置ListView的选中的Item的背景颜色(附源码)
16lz
2021-01-24
http://longyi-java.iteye.com/blog/976067
ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的。
1、配置main.xml
Java代码- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <ListViewandroid: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
Java代码
- <?xmlversion="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
Java代码
- packagecom.listButtonTest.www;
- importjava.util.ArrayList;
- importandroid.app.Activity;
- importandroid.content.Context;
- importandroid.graphics.Color;
- importandroid.os.Bundle;
- importandroid.os.Handler;
- importandroid.os.Message;
- importandroid.view.LayoutInflater;
- importandroid.view.View;
- importandroid.view.ViewGroup;
- importandroid.widget.AdapterView;
- importandroid.widget.BaseAdapter;
- importandroid.widget.LinearLayout;
- importandroid.widget.ListView;
- importandroid.widget.TextView;
- publicclasslistButtonTestextendsActivity{
- privateListViewlistView=null;
- privateListAdapterlistAdapter=null;
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- listView=(ListView)this.findViewById(R.id.listView);
- ArrayList<ButtonView>buttonListView=newArrayList<ButtonView>();
- ButtonViewa=newButtonView(R.string.l1);
- buttonListView.add(a);
- ButtonViewb=newButtonView(R.string.l2);
- buttonListView.add(b);
- ButtonViewc=newButtonView(R.string.l3);
- buttonListView.add(c);
- ButtonViewd=newButtonView(R.string.l4);
- buttonListView.add(d);
- ButtonViewe=newButtonView(R.string.l5);
- buttonListView.add(e);
- listAdapter=newListAdapter(buttonListView);
- listView.setAdapter(listAdapter);
- listView.setDividerHeight(0);
- listView.setOnItemClickListener(newListView.OnItemClickListener(){
- @Override
- publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,
- longarg3){
- //TODOAuto-generatedmethodstub
- listAdapter.setSelectedPosition(arg2);
- listAdapter.notifyDataSetInvalidated();
- }
- });
- };
- publicclassListAdapterextendsBaseAdapter{
- ArrayList<ButtonView>arrayList=null;
- LayoutInflaterinflater;
- Viewview;
- ButtonLayoutHolderbuttonLayoutHolder;
- LinearLayoutbuttonLayout=null;
- TextViewbuttonText=null;
- privateintselectedPosition=-1;//选中的位置
- publicListAdapter(ArrayList<ButtonView>buttonListView){
- //TODOAuto-generatedconstructorstub
- arrayList=buttonListView;
- }
- @Override
- publicintgetCount(){
- //TODOAuto-generatedmethodstub
- returnarrayList.size();
- }
- @Override
- publicObjectgetItem(intposition){
- //TODOAuto-generatedmethodstub
- returnarrayList.get(position);
- }
- @Override
- publiclonggetItemId(intposition){
- //TODOAuto-generatedmethodstub
- returnposition;
- }
- publicvoidsetSelectedPosition(intposition){
- selectedPosition=position;
- }
- @Override
- publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
- //TODOAuto-generatedmethodstub
- inflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- view=inflater.inflate(R.layout.button_layout,null,false);
- buttonLayoutHolder=(ButtonLayoutHolder)view.getTag();
- if(buttonLayoutHolder==null){
- buttonLayoutHolder=newButtonLayoutHolder();
- 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);
- returnview;
- }
- };
- }
- classButtonView{
- inttextViewId;
- ButtonView(inttId){
- textViewId=tId;
- }
- }
- classButtonLayoutHolder{
- LinearLayoutbuttonLayout;
- TextViewtextView;
- }
在listView的setOnItemClickListener事件中标记这次选择的Item的下标:listAdapter.setSelectedPosition(arg2);
然后调用listAdapter.notifyDataSetInvalidated()通知后台重新刷新界面。
在ListAdapter的getView()方法中,如果是选中的Item则显示背景颜色,如果不是则不显示背景颜色。
source download
更多相关文章
- Webview实现android简单的浏览器实例代码
- Android锁屏与解屏相关代码分析
- Android之Volley框架在实际开发过程中运用
- android 判断横竖屏问题的详解
- android学习笔记之AIDL
- sqlite3加密方案sqlcipher,及sqlcipher使用指南
- android 使用开源库zxing生成二维码,扫描二维码
- 如何成为一个偷懒又高效的Android开发人员
- android之camera用法实例详解