Android 点击控件(比如ListView中item),抬起后,保持按下的背景颜色

在Android开发中,为了提供良好的用户体验,有时需要在用户点击ListView的item后保持其按下时的背景颜色。这可以通过使用背景选择器和在代码中设置标记来实现。通过对ViewHolder设置状态并应用自定义的popupwindow_bg_selector资源,可以控制item的状态,并展示其被选择的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在很多时候会有以下场景,用户选择一个条目,又或者是开启一个服务关闭一个服务(比如开启拦截黑名单服务)等,都是需要保存状态,给用户提示当前选的是哪一个item,所以説 按下控件,抬起手时,保持控件按下时的颜色这样就会体验很好

listview中的item,使用背景选择器,然后代码里通过标记设置holder.tv_select_device.setSelected(true);来控制当前item的状态,标注:设置textColor可以,设置resource可以,但是这个方法不能设置背景,背景还得靠代码里实现

holder.llayout.setBackgroundResource(R.drawable.popupwindow_bg_selector);


item布局

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@drawable/popupwindow_bg_selector"
    android:gravity="center_vertical"
    android:id="@+id/ll_llayout_all"
     >

    
    <ImageView 
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginLeft="30dp"
        android:background="@drawable/popupwindow_bg_item_logo"
        />
    
    <TextView 
        android:id="@+id/tv_selectdev"
        android:layout_height="match_parent"
        android:layout_width="0dp"
	    android:layout_weight="1"
        android:text="会议室的盒子"
        android:textSize="20sp"
        android:gravity="center_vertical"
		android:textColor="@drawable/font_down_green_up_black"   
		android:layout_marginLeft="30dp"  
        />
    
    
    
    <ImageView 
        android:id="@+id/iv_ok"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_marginRight="30dp"
        android:visibility="invisible"
        android:background="@drawable/popupwindow_bg_item_ok"
        />

</LinearLayout>

文本状态选择器 font_down_green_up_black.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_focused="true" android:color="#2CD41D" /> <!-- focused -->
    <item android:state_pressed="true" android:color="#2CD41D" /> <!-- pressed -->
    <item android:state_selected="true" android:color="#2CD41D" /> <!-- pressed -->
    <item android:state_checked="true"  android:color="#2CD41D"/>
   
    <item android:color="#000000"   /> <!-- default -->
</selector>


代码中通过标记控制状态:

public class ActivityC  extends Activity  implements OnItemClickListener {
	
	private ListView lv_devicelist;
	private ArrayList testList ;
	private TestAdapter adapter;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		
	  setContentView(R.layout.activity_c_fill);
	  lv_devicelist = (ListView) findViewById(R.id.lv_devicelist);
		adapter = new TestAdapter();
		testList = new ArrayList();
		
		testList.add(new String ("HelloWorld one"));
		testList.add(new String ("HelloWorld two"));
		testList.add(new String ("HelloWorld three"));
		lv_devicelist.setAdapter(adapter);	
		lv_devicelist.setOnItemClickListener(this);
	}
	
	class TestAdapter extends BaseAdapter{

		
		int a = -1;
		public void setSelectFlag(int flag){
			if (flag==a) {
				return;
			}
			System.out.println("notifydata..........");
			a = flag;
			notifyDataSetChanged();
		}
		
		@Override
		public int getCount() {
			return 3;
		}

		@Override
		public Object getItem(int position) {
			return position;
		}

		@Override
		public long getItemId(int position) {
			// 
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {

			View view = null;
			ViewHolder holder;
			if (convertView != null ) {
				view = convertView;
				System.out.println("复用了一个view" + position);
				holder = (ViewHolder) view.getTag();

			} else {

				view = View.inflate(getApplicationContext(),
						R.layout.activity_c_fill_item, null);
				
				System.out.println("新的view" + position);
				holder = new ViewHolder();
				holder.tv_select_device = (TextView) view
						.findViewById(R.id.tv_selectdev);
				holder.iv_ok = (ImageView)view.findViewById(R.id.iv_ok);
				
				holder.llayout = (LinearLayout)view.findViewById(R.id.ll_llayout_all);

				view.setTag(holder);// 把笔记本装兜里了
			}

			holder.tv_select_device.setSelected(false);	
//			holder.llayout.setSelected(false);	
			holder.iv_ok.setVisibility(holder.iv_ok.INVISIBLE);
			holder.llayout.setBackgroundResource(R.drawable.popupwindow_bg_selector);
			
			
			
			if(a != -1&& position == a){
					System.out.println("set COLOR===>");
					holder.tv_select_device.setSelected(true);
					holder.iv_ok.setVisibility(holder.iv_ok.VISIBLE);

					holder.llayout.setBackgroundResource(R.drawable.popupwindow_bg_item_select);
				}
				
<span style="white-space:pre">			</span>holder.tv_select_device.setText(testList.get(position).toString());  

			
			return view;
		}}
	

	class ViewHolder {

		TextView tv_select_device;
		ImageView iv_ok;
		LinearLayout llayout;
	}


	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position,
			long id) {
		adapter.setSelectFlag(position);
	}




}

这样抬起时就会达到保持按下的颜色和背景..........




                          本文由NantiJey原创总结,如需转载请标明出处 :http://blog.youkuaiyun.com/jss4j/article/details/43342265

                                                     资源下载地址:http://download.youkuaiyun.com/detail/hiberatejss/8413061


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值