http://longyi-java.iteye.com/blog/976067

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

1、配置main.xml

Java代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"android:layout_width="fill_parent"
  4. android:layout_height="fill_parent">
  5. <ListViewandroid:id="@+id/listView"android:listSelector="#000000"
  6. android:layout_width="fill_parent"
  7. android:layout_height="wrap_content"/>
  8. </LinearLayout>

设置Item的获取焦点颜色为白色android:listSelector="#000000"(即不显示背景颜色)

2、配置用于ListView显示Item的button_layout.xml

Java代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:id="@+id/LinearLayoutButton"
  5. android:layout_width="144px"
  6. android:layout_height="99px"
  7. android:gravity="center"
  8. android:orientation="vertical">
  9. <TextView
  10. android:id="@+id/TextViewButton"
  11. android:layout_width="fill_parent"
  12. android:layout_height="fill_parent"
  13. android:textSize="20px">
  14. </TextView>
  15. </LinearLayout>

3、实现Activity

Java代码
  1. packagecom.listButtonTest.www;
  2. importjava.util.ArrayList;
  3. importandroid.app.Activity;
  4. importandroid.content.Context;
  5. importandroid.graphics.Color;
  6. importandroid.os.Bundle;
  7. importandroid.os.Handler;
  8. importandroid.os.Message;
  9. importandroid.view.LayoutInflater;
  10. importandroid.view.View;
  11. importandroid.view.ViewGroup;
  12. importandroid.widget.AdapterView;
  13. importandroid.widget.BaseAdapter;
  14. importandroid.widget.LinearLayout;
  15. importandroid.widget.ListView;
  16. importandroid.widget.TextView;
  17. publicclasslistButtonTestextendsActivity{
  18. privateListViewlistView=null;
  19. privateListAdapterlistAdapter=null;
  20. /**Calledwhentheactivityisfirstcreated.*/
  21. @Override
  22. publicvoidonCreate(BundlesavedInstanceState){
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.main);
  25. listView=(ListView)this.findViewById(R.id.listView);
  26. ArrayList<ButtonView>buttonListView=newArrayList<ButtonView>();
  27. ButtonViewa=newButtonView(R.string.l1);
  28. buttonListView.add(a);
  29. ButtonViewb=newButtonView(R.string.l2);
  30. buttonListView.add(b);
  31. ButtonViewc=newButtonView(R.string.l3);
  32. buttonListView.add(c);
  33. ButtonViewd=newButtonView(R.string.l4);
  34. buttonListView.add(d);
  35. ButtonViewe=newButtonView(R.string.l5);
  36. buttonListView.add(e);
  37. listAdapter=newListAdapter(buttonListView);
  38. listView.setAdapter(listAdapter);
  39. listView.setDividerHeight(0);
  40. listView.setOnItemClickListener(newListView.OnItemClickListener(){
  41. @Override
  42. publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,
  43. longarg3){
  44. //TODOAuto-generatedmethodstub
  45. listAdapter.setSelectedPosition(arg2);
  46. listAdapter.notifyDataSetInvalidated();
  47. }
  48. });
  49. };
  50. publicclassListAdapterextendsBaseAdapter{
  51. ArrayList<ButtonView>arrayList=null;
  52. LayoutInflaterinflater;
  53. Viewview;
  54. ButtonLayoutHolderbuttonLayoutHolder;
  55. LinearLayoutbuttonLayout=null;
  56. TextViewbuttonText=null;
  57. privateintselectedPosition=-1;//选中的位置
  58. publicListAdapter(ArrayList<ButtonView>buttonListView){
  59. //TODOAuto-generatedconstructorstub
  60. arrayList=buttonListView;
  61. }
  62. @Override
  63. publicintgetCount(){
  64. //TODOAuto-generatedmethodstub
  65. returnarrayList.size();
  66. }
  67. @Override
  68. publicObjectgetItem(intposition){
  69. //TODOAuto-generatedmethodstub
  70. returnarrayList.get(position);
  71. }
  72. @Override
  73. publiclonggetItemId(intposition){
  74. //TODOAuto-generatedmethodstub
  75. returnposition;
  76. }
  77. publicvoidsetSelectedPosition(intposition){
  78. selectedPosition=position;
  79. }
  80. @Override
  81. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  82. //TODOAuto-generatedmethodstub
  83. inflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  84. view=inflater.inflate(R.layout.button_layout,null,false);
  85. buttonLayoutHolder=(ButtonLayoutHolder)view.getTag();
  86. if(buttonLayoutHolder==null){
  87. buttonLayoutHolder=newButtonLayoutHolder();
  88. buttonLayoutHolder.buttonLayout=(LinearLayout)view
  89. .findViewById(R.id.LinearLayoutButton);
  90. buttonLayoutHolder.textView=(TextView)view
  91. .findViewById(R.id.TextViewButton);
  92. view.setTag(buttonLayoutHolder);
  93. }
  94. buttonLayout=buttonLayoutHolder.buttonLayout;
  95. buttonText=buttonLayoutHolder.textView;
  96. if(selectedPosition==position){
  97. buttonText.setSelected(true);
  98. buttonText.setPressed(true);
  99. buttonLayout.setBackgroundColor(Color.RED);
  100. }else{
  101. buttonText.setSelected(false);
  102. buttonText.setPressed(false);
  103. buttonLayout.setBackgroundColor(Color.TRANSPARENT);
  104. }
  105. buttonText.setTextColor(Color.WHITE);
  106. buttonText.setText(arrayList.get(position).textViewId);
  107. returnview;
  108. }
  109. };
  110. }
  111. classButtonView{
  112. inttextViewId;
  113. ButtonView(inttId){
  114. textViewId=tId;
  115. }
  116. }
  117. classButtonLayoutHolder{
  118. LinearLayoutbuttonLayout;
  119. TextViewtextView;
  120. }

在listView的setOnItemClickListener事件中标记这次选择的Item的下标:listAdapter.setSelectedPosition(arg2);

然后调用listAdapter.notifyDataSetInvalidated()通知后台重新刷新界面。

在ListAdapter的getView()方法中,如果是选中的Item则显示背景颜色,如果不是则不显示背景颜色。

source download


更多相关文章

  1. Webview实现android简单的浏览器实例代码
  2. Android锁屏与解屏相关代码分析
  3. Android之Volley框架在实际开发过程中运用
  4. android 判断横竖屏问题的详解
  5. android学习笔记之AIDL
  6. sqlite3加密方案sqlcipher,及sqlcipher使用指南
  7. android 使用开源库zxing生成二维码,扫描二维码
  8. 如何成为一个偷懒又高效的Android开发人员
  9. android之camera用法实例详解

随机推荐

  1. Fabric组织动态管理
  2. 2021-03-18:给定一个字符串str,只由‘X’和
  3. 混合云场景下金融级中间件自动化运维平台
  4. 终端安全发展
  5. 人生苦短,56岁的地产大佬潘石屹学 Python!
  6. Git 从入坑到成神,你只需要敲一遍命令!
  7. 何所思:为什么说,技术的路上,弯道超车总是一
  8. 企业级数据分析体系的最佳实践
  9. 网易数据库运维自动化演进与 AIOps 探索
  10. 携程万台规模容器云平台运维管理实践