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

android 布局文件中 view 焦点获取浅析

2014-11-07 12:29 281 查看
      参与开发一个视频播放器的时候,发现对布局中的焦点的控制不会。。有的能下来有的不能下来,有的下来之后又上不去了,究竟是什么原因呢。

看了这篇文章,顿时解惑不少。

关键词在于:边界,Activity对整体焦点的控制,dispatchKeyEvent ;

就是利用dispatchKeyEvent  重新获取按键消息,从而在全局上使得布局中 你想要获取焦点的元素获取焦点。而在焦点中的元素是干不了不属于自己

范围内的事情。

原文:单击打开原文 

前不久遇到一个问题,在一个布局文件中上下移动焦点,这个布局文件的大体结构如下:

 

            <RelativeLayout >

                    <LinearLayout ></LinearLayout>

                    <HorizontalScrollView >

                               <LinearLayout ></LinearLayout>

                     </HorizontalScrollView>

            </RelativeLayout>

 

        现在遇到的问题是:我们要在 HorizontalScrollView 布局中左右移动焦点,在 下面的 LinearLayout
中有很多水

 

平放置的AppWidget,当焦点移动到某个AppWidget时将这个AppWidget的Layout布局放到上面

 

的 LinearLayout 中,我们需要实现的效果是:可以将焦点在上下两个 LinearLayout
之间移动。

 

          在最初的设计中,我们是将 KeyEvent 事件交给 HorizontalScrollView
来处理,处理方法是在: 

 

HorizontalScrollView 上加了 OnKeyListener。结果是:我们只能在下面的 LinearLayout
中左右移动焦点,不能

 

将焦点移动到上面的 LinearLayout 上,或者移动上去后就移不下来了。

 

           下面谈谈我的解决过程:

 

         (1)首先在 android SDK 文档中对 HorizontalScrollView
的定义是: Layout container for a view

 

hierarchy,并且 HorizontalScrollView only supports horizontal scrolling.  所以,在 HorizontalScrollView


 

能添加 KeyEvent.KEYCODE_DPAD_RIGHT 和 KeyEvent.KEYCODE_DPAD_LEFT 的 KeyEvent 事件,而 

 

KeyEvent.KEYCODE_DPAD_DOWN 和 KeyEvent.KEYCODE_DPAD_UP 事件是得不到正确处理的。

 

原因有两点:(1)HorizontalScrollView 本身只能在水平方向移动。(2)OnKeyListener 事件是加

 

在 HorizontalScrollView 上的,如果你想向上移动到上面的 LinearLayout
上,其实已经越界了,不是这

 

个 OnKeyListener 能处理的了。

 

           (2)在 android 中当一个按键按下时的处理过程是: 

 

             首先触发该 Activity 的 dispatchKeyEvent 方法

 

             然后触发 onUserInteraction 方法

 

             再然后触发 onKeyDown 方法

 

           (3)android 对 dispatchKeyEvent 方法的定义是: Called to process key events. You can override

 

this to intercept all key events before they are dispatched to the window. 所以,要想在整个 Layout 中移

 

动焦点,应该重写 dispatchKeyEvent 方法,将 KeyEvent 事件首先交给 dispatchKeyEvent 方法来处理,才能在这

 

个 Activity 的整个 Layout 中自由的移动焦点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: