失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > android中设置ListView的选中的Item的背景颜色(附源码)

android中设置ListView的选中的Item的背景颜色(附源码)

时间:2020-06-17 12:07:20

相关推荐

android中设置ListView的选中的Item的背景颜色(附源码)

http://longyi-/blog/976067

ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的。

1、配置main.xml

Java代码 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="/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="/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

如果觉得《android中设置ListView的选中的Item的背景颜色(附源码)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。