您的位置:首页 > 移动开发 > Android开发

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

2015-01-31 18:07 621 查看
在很多时候会有以下场景,用户选择一个条目,又或者是开启一个服务关闭一个服务(比如开启拦截黑名单服务)等,都是需要保存状态,给用户提示当前选的是哪一个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.csdn.net/jss4j/article/details/43342265

                                                     资源下载地址:http://download.csdn.net/detail/hiberatejss/8413061
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息