天天看點

Android 點選控件(比如ListView中item),擡起後,保持按下的背景顔色

在很多時候會有以下場景,使用者選擇一個條目,又或者是開啟一個服務關閉一個服務(比如開啟攔截黑名單服務)等,都是需要儲存狀态,給使用者提示目前選的是哪一個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);
	}




}
           

這樣擡起時就會達到保持按下的顔色和背景..........

Android 點選控件(比如ListView中item),擡起後,保持按下的背景顔色

                          本文由NantiJey原創總結,如需轉載請标明出處 :http://blog.csdn.net/jss4j/article/details/43342265

                                                     資源下載下傳位址:http://download.csdn.net/detail/hiberatejss/8413061

繼續閱讀