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

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可以改变成我们想要的效果,至于想实现什么效果由自己喜好去定义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android listview
相关文章推荐