Android中设置焦点时,首先要让这个控件有获取焦点的能力,在XML文件中通过给控件添加android:focusable="true"
属性来表明该控件有获得焦点的权利。然后在页面使用时,需要哪个控件获得焦点就在代码中使用requestFocus()
方法来强制要求该控件获取焦点。
以上是普通控件获取焦点的方法。但是在某些情况下比如像GridVIew
等控件我们不需要让这一个整体获取焦点,而是让这个控件里面的item获取焦点。这种情况下,我们需要对GridView
设置不能获取焦点android:focusable="false"
,同时要将子控件需要获取到焦点的控件设置focusable为true,表明子控件有获取到焦点的能力。但是同时还要设置将当GridView
需要requestFocus()
时让item获取到焦点,此时就需要给GridView
设置 android:descendantFocusability="afterDescendants"
属性,表明当该GridView
获取焦点时首先将焦点交给子控件去显示。android:descendantFocusability
有三种取值,分别是:
取值 | 含义 |
afterDescendants | viewgroup只有当其子类控件不需要获取焦点时才获取焦点 |
beforeDescendants | viewgroup会优先其子类控件而获取到焦点 |
blocksDescendants | viewgroup会覆盖子类控件而直接获得焦点 |
在上面的这种情况下,我们使用的是第一种。但是有很多情况下,我们要求的是对item这一个整体获得焦点,因此我们需要在item的整体布局中添加上blocksDescendants
属性,不让item的具体元素获得焦点。