点击之后背景颜色不变,我做的是松开手之后背景颜色没有固定,再点击其他item时候点击的item颜色改变,其他还是原来颜色
Android中的Selector主要是用来改变ListView和Button控件的默认背景
one template:
复制代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true"
android:drawable="@drawable/ic_mymenu_pressed" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/ic_mymenu_pressed" /> <!-- focused -->
<item android:drawable="@drawable/ic_mymenu" /> <!-- default -->
</selector>
复制代码
复制代码
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 默认时的背景图片-->
<item android:drawable="@drawable/pic1" />
<!-- 没有焦点时的背景图片 -->
<item android:state_window_focused="false"
android:drawable="@drawable/pic1" />
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->
<item android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic2" />
<!-- 触摸模式下单击时的背景图片-->
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pic3" />
<!--选中时的图片背景-->
<item android:state_selected="true" android:drawable="@drawable/pic4" />
<!--获得焦点时的图片背景-->
<item android:state_focused="true" android:drawable="@drawable/pic5" />
</selector>
复制代码
ListView设置点击背景效果,有三种方法可以来引用刚才创建的selector文件:
(1)在ListView中添加如下属性代码
android:listSelector="@drawable/mylist_view"
(2)在ListView的item界面中添加如下属性代码
android:background="@drawable/mylist_view"
(3)利用JAVA代码直接编写
Drawable drawable = getResources().getDrawable(R.drawable.mylist_view);
listView.setSelector(drawable);
为了防止列表拉黑的情况发生,需要在ListView中添加以下的属性代码
android:cacheColorHint="@android:color/transparent"
or
android:cacheColorHint="#00000000"
or
listView.setCacheColorHint(0);
属性介绍:
android:state_selected 选中
android:state_focused 获得焦点
android:state_pressed 点击
android:state_enabled 设置是否响应事件,指所有事件
OnItemClickListener listViewOnItemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
mSelectedItem = position;
mAdapter.notifyDataSetChanged();
}
};
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view = View.inflate(context, R.layout.item_list, null);
if (position == mSelectedItem) {
// 颜色设置
}
return view;
}
想在drawable中使用item的selector,不是呀这样代码设置,您还有其他办法吗,我使用的selector只有按下才变色,松开又变成原来的了,不知道怎么回事儿
一:
加一个标志是否选中:is_selected true / flase
要有两个selector ,一个说选中的,另外一个说没有选中的
然后再getview里面做通过is_selected标志来做判断,设置选中的selector还是没有选中的selector就可以了
if (position == mSelectedItem && is_selected) {
// 设置选中的selector
}else{
// 设置未选中的selector
}
记得点击事件要调研noticefy更新一下
holder.itemview.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_UP:{
holder.itemview.setSelected(false);
break;
}case MotionEvent.ACTION_DOWN:{
holder.itemview.setSelected(true);
break;
}case MotionEvent.ACTION_CANCEL:{
holder.itemview.setSelected(false);
}
}
return false;
}
});
这样就行了,ACTION_CANCEL是处理没有抬起,移动到控件外的情况。