`

android中设置ListView的选中的Item的背景颜色

阅读更多

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

 

  

 

   

 

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

 

 

 

  

分享到:
评论
7 楼 sunxiangyuan131415 2014-12-25  
 
6 楼 liu321jie 2014-04-21  
正需要呢,非常感谢!!!!!!!!!!      
5 楼 tmacbo. 2013-12-17  
楼主给力!
4 楼 eieihihi 2013-11-18  
哪里用那么麻烦,ListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
3 楼 雨雾纷飞 2013-01-23  
正需要,谢谢分享!
2 楼 liu_jia_guo 2012-08-23  
找了好久的,谢谢
1 楼 dellheng 2012-01-04  
谢了,正需要

相关推荐

    ListView选中item颜色改变

    "ListView选中item颜色改变"是常见的需求,它涉及到ListView的交互设计,使得用户可以通过视觉反馈感知到所选中的条目。本篇文章将深入探讨如何实现这个功能。 首先,我们需要了解ListView的基本工作原理。ListView...

    ListView默认Item选中状态

    在XML布局文件中,我们可以为选中状态定义不同的背景颜色、边框等样式,然后在`getView()`方法中根据选中状态应用相应的布局。 ```xml &lt;!-- item_layout.xml --&gt; &lt;LinearLayout xmlns:android=...

    android listView 改变选中行的 字体颜色和 图片

    要改变ListView选中行的字体颜色和图片,我们需要理解ListView的工作原理,以及如何自定义其Adapter和视图。以下是一些关键知识点的详细介绍: 1. **ListView的基本使用**: - ListView是一个视图容器,它能加载...

    【android】listview改变选中行背景图片

    注意,在上述代码中,`android:state_selected="true"`状态用于定义ListView项被选中时的背景,这表明当ListView的某个item被选中时,会使用tvitembg.xml中定义的选中状态对应的背景图片。 通过上述步骤,即可实现...

    android studio,demo,listview的测试,选中某一个选项item,颜色的变化。

    在这个"android studio,demo,listview的测试,选中某一个选项item,颜色的变化"项目中,我们将探讨如何在Android Studio中创建一个ListView,并实现点击某个列表项时,该项的颜色变化效果。这个功能通常用于提供用户...

    触碰模式下的listview的选中项背景高亮

    2. 设置ListView的Item背景:在ListView的Adapter中,为每个列表项View设置上面创建的选择器作为背景。通常在`getView()`方法中完成: ```java @Override public View getView(int position, View convertView, ...

    安卓ListView选中状态

    本篇将详细介绍如何实现“安卓ListView选中状态”以及如何在其上添加背景颜色。 首先,我们需要理解ListView的工作原理。ListView通过Adapter类来绑定数据源,Adapter会将数据转化为View显示在列表中。每个View代表...

    ListView被选中 出现选中颜色标示

    - 为了实现选中项高亮显示,我们需要自定义一个ListView的Item布局,添加一个背景资源,该资源包含两种状态:默认状态和选中状态。通常,我们可以使用selector资源文件来定义这两种状态。 - Selector是一种...

    Android ListView item 选中高亮显示

    在XML中定义一个StateListDrawable,然后将其设置为ListView item的背景。 6. **保存和恢复选择状态** 当ListView滚动时,为了保持选中状态,你需要在Adapter中保存每个item的选择状态。可以使用...

    ListView选中行高亮

    1. **设置选择模式**:在XML布局文件中或代码中设置ListView的`android:listSelector`属性,该属性用于定义列表项被选中时的背景。你可以设置一个自定义的Drawable资源,或者使用系统默认的高亮颜色。 2. **监听...

    Android ListView 选中效果 自定义

    总之,自定义Android ListView的选中效果涉及到Drawable状态选择器、Item布局、Adapter以及事件监听等多个方面。通过灵活运用这些技术,开发者可以创建出各种独特的交互体验,使应用更加吸引人。

    自定义listview 圆角listviewitem 处理 选中背景处理

    总之,自定义圆角ListView项和处理选中背景是Android开发中的常见需求。通过理解ListView的工作机制,结合布局文件、代码绘制、监听事件和自定义Adapter,我们可以实现各种个性化的效果。在实际开发中,要注意性能...

    Android中Listview点击item不变颜色及设置listselector 无效的解决方案

    1、item的layout设置background颜色值,去掉背景颜色即可 2、listview中listselector属性的效果被覆盖了,比如列表的Item为一个占满单元格的ImageView的时候,ImageView如果有内容那么listSelector的效果就会被挡住 ...

    Android列表之圆角ListView选中(一)

    以上就是实现“Android列表之圆角ListView选中”的基本步骤。CornerDemo1这个项目应该包含了实现这个功能的示例代码,你可以通过阅读和运行它来深入理解这些概念。在实际开发中,可以根据具体需求调整样式和交互,让...

    Listview点击item高亮显示,

    在ListView的每一项布局文件中,可以添加一个背景颜色属性,比如使用一个selector资源文件。Selector是一种状态列表资源,可以根据组件的状态改变其外观。在selector中定义两种状态,一种是默认状态,一种是选中...

    ListView保留item选中效果

    在适配器中,根据item是否被选中来设置其背景。 2. **实现ChoiceMode**:ListView有一个setChoiceMode()方法,可以设置为SingleChoice、MultipleChoice或None。例如,使用SingleChoice模式,ListView会自动处理单选...

    listview item选中删除,全选,取消

    为了让用户明确知道哪一项被选中,可以设置选中项的颜色、背景等视觉效果。这需要在Adapter的`getView()`方法中根据当前项的选中状态来设置。 6. 事件监听: 通过实现`OnItemClickListener`和`...

    Android列表之圆角ListView选中(二)

    本教程将详细介绍如何在Android中实现圆角ListView并处理选中状态,基于提供的"Android列表之圆角ListView选中(二)"项目。 首先,我们需要理解ListView的基本用法。ListView通过Adapter来绑定数据,并通过...

    ListView选中多个

    "ListView选中多个"这个主题主要涉及到ListView的复选框选择、多选模式以及相关的事件处理。 1. **复选框选择**: 在ListView中实现多选,通常会在每个列表项中添加一个复选框。这可以通过自定义Adapter来完成,...

Global site tag (gtag.js) - Google Analytics