什么是安卓焦点的焦点?

假如你没有焦点相当于你点不箌那个控件。不能对其进行监听操作等

你对这个回答的评价是

提高用户体验度,表示让用户关注这个内容

你对这个回答的评价是

你对這个回答的评价是?

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道嘚答案

}

   这篇文章使用一个demo来描述一下android焦點分发的基本流程描述一下我们一个控件请求焦点到我们切换焦点的时候走的是怎么样一个流程,要是对android的焦点的基础不了解的请看我湔面的文章:Android焦点分发基础 先对android焦点有一个感性得认识。


下面一张图描述了布局关系:

接下来看看打印出来的日志信息:

可以看到焦点請求(requestFocus)是从父容器向下寻找的,焦点的寻找(findFocus)也是从父容器向下寻找

上面是我们使FocusButton1主动请求获取焦点,下面我们试试不主动获取焦點会怎么样:

    其实还是FocusButton1获得了焦点只是FocusButton1获得焦点是系统自己执行的,系统自动请求焦点也是从最顶层的容器控件开始向内请求的我们進入一个界面系统会自动请求焦点,寻找焦点最后使用一个控件获得焦点。   

  我们再尝试一下切换焦点看看focusSearch是怎么工作的,我们把焦点姠下按到第二个按钮

   我们可以看到,切换焦点的时候也是要从最顶层的父容器寻找到焦点(findFocus),然后从获得到焦点的控件开始从内向外调用focusSearch寻找下一个焦点控件

 总结:Android的焦点分发跟事件分发类似,有一个从内向外从外向内的过程,焦点分发中寻找当前的焦点控件(findFocus)和焦点的请求(requestChildFocus)都是从外向内的,就是从顶层的父容向内层的子容器寻找和请求但是搜寻下一个焦点(focusSearch)是从当前焦点控件开始嘚,就是从内向外寻找到这里我们知道了Android焦点分发的一个基本流程,但是还不知道焦点分发的原理后面我会写一篇《Android焦点分发原理》來分析为啥是这样的一个流程。下一篇文章会介绍 findFocus、requestFocus、requestChildFocus和focusSearch这几个方法

    思考:既然焦点分发是层层传递的,我就可以拦截焦点分发可以玳替系统来自定义我们的焦点跳转,自定义一个容器layout写上两个接口,在重写的focusSearch方法中调用对应的接口方法这样我就可以操控焦点 分发,其实系统提供了setNextFocusDownId类似的方法可以简单地控制焦点,但是这样不是很灵活

}

我要回帖

更多关于 安卓焦点 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信