ym13140830
ym13140830
采纳率100%
2017-12-17 07:13 阅读 1.6k

Android使用selector点击listview改变背景颜色

5

点击之后背景颜色不变,我做的是松开手之后背景颜色没有固定,再点击其他item时候点击的item颜色改变,其他还是原来颜色

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • 已采纳
    devmiao devmiao 2017-12-17 14:20
     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 设置是否响应事件,指所有事件
    
    点赞 评论 复制链接分享
  • terrydidi terrydidi 2017-12-17 08:05
    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;
    }
    
    点赞 评论 复制链接分享
  • ym13140830 ym13140830 2017-12-17 10:35

    想在drawable中使用item的selector,不是呀这样代码设置,您还有其他办法吗,我使用的selector只有按下才变色,松开又变成原来的了,不知道怎么回事儿

    点赞 评论 复制链接分享
  • guoliangzhao guoliangzhao 2017-12-17 12:19




    点赞 评论 复制链接分享
  • hxhxhx123123 hxhxhx123123 2017-12-17 13:38

    一:
    加一个标志是否选中:is_selected true / flase
    要有两个selector ,一个说选中的,另外一个说没有选中的
    然后再getview里面做通过is_selected标志来做判断,设置选中的selector还是没有选中的selector就可以了
    if (position == mSelectedItem && is_selected) {
    // 设置选中的selector
    }else{
    // 设置未选中的selector
    }
    记得点击事件要调研noticefy更新一下

    点赞 评论 复制链接分享
  • yu_duan_hun yu_duan_hun 2017-12-21 08:17
     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是处理没有抬起,移动到控件外的情况。

    点赞 评论 复制链接分享

相关推荐