ListView获取item的焦点以及设置item点击的背景效果

 
  

获取item焦点

在使用ListView进行复杂布局渲染时,如果布局中包含Button,CheckBox系列的可获取事件焦点的组件时,就会导致ListView的选项失去焦点,点击每一项后无反应,就是因为子布局中的焦点控件抢夺了ListView的焦点,此时为了使ListView获取焦点可以在子布局的焦点控件组件上设置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来实现自己想要的点击效果:




    
        
    
    


上面的selector只是设置了按下后和正常情况下的显示颜色,可以在中设置其他属性,如shape,背景图片等,定义完selector以后在ListView渲染view时将这个selector作为背景设置到item的view对象上:
//设置ListView Item点击后的效果,使用Selector
convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.list_item_selector));

这里只是说明一下这个做法和思路,通过自定义selector可以改变成我们想要的效果,至于想实现什么效果由自己喜好去定义。

你可能感兴趣的:(android学习--基础篇)