ListView获取item的焦点以及设置item点击的背景效果
2014-08-15 18:46
423 查看
<pre name="code" class="plain">
获取item焦点
在使用ListView进行复杂布局渲染时,如果布局中包含Button,CheckBox系列的可获取事件焦点的组件时,就会导致ListView的选项失去焦点,点击每一项后无反应,就是因为子布局中的焦点控件抢夺了ListView的焦点,此时为了使ListView获取焦点可以在子布局的焦点控件组件上设置android:clickable="true"以及android:focusable="false"这两个属性:
<Button android:id="@+id/muisc_download_btn" android:layout_width="30dp" android:layout_height="30dp" android:background="@drawable/down_btn_selector" android:layout_alignParentRight="true" android:layout_marginTop="18dp" android:layout_marginRight="10dp" android:clickable="true" android:focusable="false" />
这样Button就不会抢夺ListView的焦点,而且Button也能正常捕获自己的click事件。这种设置方法可以解决问题,但是当子布局中存在多个类似与Button这样可以获取事件焦点的控件时,每个控件都这样设置难免会觉得麻烦,这时可以使用Android提供的android:descendantFocusability属性来进行设置,descendantFocusability属性有下面这三个可选值:
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
一般情况我们在子布局的根节点上使用descendantFocusability属性并设置第三个值:blocksDescendants,这样就可以覆盖子类控件而直接使ListView获得焦点。
自定义Item点击效果:
在ListView中点击每个Item,点击的那个item会有一个背景变化的效果,我们可以是用selector来实现自己想要的点击效果:<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 按下后的显示效果 --> <item android:state_pressed="true"><color android:color="#FCC302" /></item> <!-- 正常情况下的效果 --> <item><color android:color="#F4F4F4" /></item> </selector>
上面的selector只是设置了按下后和正常情况下的显示颜色,可以在<item>中设置其他属性,如shape,背景图片等,定义完selector以后在ListView渲染view时将这个selector作为背景设置到item的view对象上:
//设置ListView Item点击后的效果,使用Selector convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.list_item_selector));
这里只是说明一下这个做法和思路,通过自定义selector可以改变成我们想要的效果,至于想实现什么效果由自己喜好去定义。
相关文章推荐
- ListView 中设置setonitemclicklistener()监听时,无法获取item条目的点击事件焦点
- android listview 设置点击item背景颜色效果
- 如何设置listview 某个item不可点击,即没有背景变色的效果
- Android:ListView设置item点击背景效果
- android ListView item 点击设置背景图片需要注意的问题
- Android listview 的 item 点击无效(无法获取焦点)的解决方法
- recylview和listview中item如何设置点击效果?
- android 组件背景角边框以及listview的点击效果
- Listview点击事件失效问题解决以及每个Item 子控件获取focus
- android中如何去掉pulltorefreshlistview点击item时的背景颜色,与item外边距设置
- ListView集合中设置标记 setTag();方法带一个参数和两个参数的区别,以及设置标记时ViewHolder中的每一个属性控件都需要设置一次,否则在Item中每一个控件的点击事件中取出设置的标
- 去掉或设置 listview的item点击时候的背景颜色
- 点击listview,改变item的背景颜色设置
- GridView 设置背景透明以及Item的点击动画
- Android 点击listView的item弹出软键盘并且EditText获取焦点
- 2.7学习内容 listview中item焦点获取顺序设置
- 自定义RecycleView实现TV应用上的item焦点获取以及设置当前选中的item居中
- Android中listview的item点击时候去掉背景颜色或者设置成透明的
- Android TV开发:设置全局焦点框及listview中item的焦点获取
- android如何设置listview点击后的item背景颜色的变换