现在的位置: 首页 > 综合 > 正文

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

2018年09月02日 ⁄ 综合 ⁄ 共 4679字 ⁄ 字号 评论关闭

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则显示背景颜色,如果不是则不显示背景颜色。

抱歉!评论已关闭.