1. 程式人生 > >Android中設定ListView的選中的Item的背景顏色

Android中設定ListView的選中的Item的背景顏色

    ListView中沒有預設的選擇顏色,只有選擇Item後的焦點顏色,滑鼠點選時Item有顏色,放開滑鼠後顏色也就沒有了,要實現放開滑鼠後選擇項的背景還是有顏色的

1、配置main.xml

Java程式碼  收藏程式碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical" android:layout_width="fill_parent"
  4.     android:layout_height="fill_parent"
    >  
  5.     <ListView android: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. <?xml version=
    "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. package com.listButtonTest.www;  
  2. import java.util.ArrayList;  
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.graphics.Color;  
  6. import android.os.Bundle;  
  7. import android.os.Handler;  
  8. import android.os.Message;  
  9. import android.view.LayoutInflater;  
  10. import android.view.View;  
  11. import android.view.ViewGroup;  
  12. import android.widget.AdapterView;  
  13. import android.widget.BaseAdapter;  
  14. import android.widget.LinearLayout;  
  15. import android.widget.ListView;  
  16. import android.widget.TextView;  
  17. publicclass listButtonTest extends Activity {  
  18.     private ListView listView = null;  
  19.     private ListAdapter listAdapter = null;  
  20.     /** Called when the activity is first created. */
  21.     @Override
  22.     publicvoid onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.main);  
  25.         listView = (ListView) this.findViewById(R.id.listView);  
  26.         ArrayList<ButtonView> buttonListView = new ArrayList<ButtonView>();  
  27.         ButtonView a = new ButtonView(R.string.l1);  
  28.         buttonListView.add(a);  
  29.         ButtonView b = new ButtonView(R.string.l2);  
  30.         buttonListView.add(b);  
  31.         ButtonView c = new ButtonView(R.string.l3);  
  32.         buttonListView.add(c);  
  33.         ButtonView d = new ButtonView(R.string.l4);  
  34.         buttonListView.add(d);  
  35.         ButtonView e = new ButtonView(R.string.l5);  
  36.         buttonListView.add(e);  
  37.         listAdapter = new ListAdapter(buttonListView);  
  38.         listView.setAdapter(listAdapter);  
  39.         listView.setDividerHeight(0);  
  40.         listView.setOnItemClickListener(new ListView.OnItemClickListener() {  
  41.             @Override
  42.             publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
  43.                     long arg3) {  
  44.                 // TODO Auto-generated method stub
  45.                 listAdapter.setSelectedPosition(arg2);  
  46.                 listAdapter.notifyDataSetInvalidated();     
  47.             }  
  48.         });  
  49.     };  
  50.     publicclass ListAdapter extends BaseAdapter {  
  51.         ArrayList<ButtonView> arrayList = null;  
  52.         LayoutInflater inflater;  
  53.         View view;  
  54.         ButtonLayoutHolder buttonLayoutHolder;  
  55.         LinearLayout buttonLayout = null;  
  56.         TextView buttonText = null;  
  57.         privateint selectedPosition = -1;// 選中的位置
  58.         public ListAdapter(ArrayList<ButtonView> buttonListView) {  
  59.             // TODO Auto-generated constructor stub
  60.             arrayList = buttonListView;  
  61.         }  
  62.         @Override
  63.         publicint getCount() {  
  64.             // TODO Auto-generated method stub
  65.             return arrayList.size();  
  66.         }  
  67.         @Override
  68.         public Object getItem(int position) {  
  69.             // TODO Auto-generated method stub
  70.             return arrayList.get(position);  
  71.         }  
  72.         @Override
  73.         publiclong getItemId(int position) {  
  74.             // TODO Auto-generated method stub
  75.             return position;  
  76.         }  
  77.         publicvoid setSelectedPosition(int position) {  
  78.             selectedPosition = position;  
  79.         }  
  80.         @Override
  81.         public View getView(int position, View convertView, ViewGroup parent) {  
  82.             // TODO Auto-generated method stub
  83.             inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  84.             view = inflater.inflate(R.layout.button_layout, nullfalse);  
  85.             buttonLayoutHolder = (ButtonLayoutHolder) view.getTag();  
  86.             if (buttonLayoutHolder == null) {  
  87.                 buttonLayoutHolder = new ButtonLayoutHolder();  
  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.             return view;  
  108.         }  
  109.     };  
  110. }  
  111. class ButtonView {  
  112.     int textViewId;  
  113.     ButtonView(int tId) {  
  114.         textViewId = tId;  
  115.     }  
  116. }  
  117. class ButtonLayoutHolder {  
  118.     LinearLayout buttonLayout;  
  119.     TextView textView;  
  120. }  

  在listView的setOnItemClickListener事件中標記這次選擇的Item的下標:listAdapter.setSelectedPosition(arg2);

  然後呼叫listAdapter.notifyDataSetInvalidated()通知後臺重新重新整理介面。

  在ListAdapter的getView()方法中,如果是選中的Item則顯示背景顏色,如果不是則不顯示背景顏色。