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的具体元素获得焦点。