Android view同时响应焦点和点击事件

项目需求,在一个list中点击某一个item,item中的文字颜色会变化,同时要响应点击事件。

对于文字颜色变化的需求我用selcetor来实现。

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:color="@color/red" android:state_pressed="true" />

<item android:color="@color/red" android:state_focused="true" />

<item android:color="@color/black" />

</selector>

当我点点击一个item时,之前的item就要恢复原始状态,这就需要整个list中有一个互斥变量。我第一个时间想到了focus(也可以自己维护一个专门保存状态的列表,但是我觉得麻烦),设置控件android:focusableInTouchMode="true"和android:focusable="true"之后测试发现,颜色变化效果是可以了,但是没有响应点击事件,要点第二次的时候才响应点击事件。

这样肯定是不行的,解决办法就是监听焦点的变化事件,然后在里面手动触发点击事件。判断的关键就在View#isInTouchMode(),这个方法表示当前是否是触摸模式,如果是触摸模式,控件第一次获得焦点的同事就要响应点击事件

public View.OnFocusChangeListenermOnFocusChangeListener=new View.OnFocusChangeListener() {

@Override

 public void onFocusChange(View view, boolean hasFocus) {

if(hasFocus){

// 如果是touchmode就执行click,否则就会只是选中。

if (view.isInTouchMode()){

view.performClick();

            }

}

}

};

如粗依赖我们就可以同时响应焦点和点击事件了。

参考:https://blog.csdn.net/mcryeasy/article/details/53708493

https://blog.csdn.net/jaycee110905/article/details/8240677

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容