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

Android TV开发经验总结---初识TV开发

2016-11-02 10:09 471 查看
  之前一直从事手机APP应用开发,由于工作的需要转入TV电视端的开发,初次接触确实有点懵逼,在TV开发过程中的处理思路跟手机还是有很大区别的,接下来将讲述下TV开发过程的经验,与大家一起分享共同学习。

       刚接触TV开发,需要我们转变下思路,在TV开发中没有以前我们手机端的什么 dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent 事件来分发,而需要使用dispatchKeyEvent、onKeyDown、onKeyLisenter 等事件来分发处理焦点问题,而且TV端焦点没有什么好办法可以全局控制,需要我们自己来想办法规定焦点走向,可能一个没处理好,就一脸懵逼了,焦点为啥跑的不见了,焦点为啥跑那里去了等等问题。
接下来我们就说说在TV端开发的基础知识

   Android TV
app开发与一般Android开发最大的区别在于焦点控制 , 用户在使用Android TV设备主要是通过遥控器操作app。机顶盒应用不同于手机应用,因为多数是没有触摸屏的,只能靠遥控器,所以要保持一个焦点的位置,让用户知道当前操作作用的对象. 然而一些app,依据系统对focus的判断,会出现的状况: 上下导航时,不是想要的结果. 边缘移动时,会出现焦点丢失的状况. 有时想直接定位到某个位置上. 

        android提供了一些焦点相关的属性,在现有的框架层下通过设置View的属性来获得焦点

        android:focusable:设置一个控件能否获得焦点

        android:background:设置在作为背景的drawable

        android:nextFocusDown:定义下一个获得焦点的控件当按下键时

        android:nextFocusUp:定义下一个获得焦点的控件当按上键时

        android:nextFocusLeft:定义下一个获得焦点的控件当按左键时

        android:nextFocusRight:定义下一个获得焦点的控件当按右键时

        <requestFocus/>:强制设置一个焦点到指定的view或它的一个子类,前提是android:focusable为true能够获得焦点

         下面列出两种方法处理焦点问题

   第一种方法:

   采用Android自带的直接控制焦点上下左右的方法。这种方法的前提是必须知道每个view的id,因此在进行布局时有必须要通过view.setId(…)指定view的特定ID,然后通过view.setNextLeftView(…)等四个方法控制该view的上下左右移动后所到达的view。然而这种方法只适用于前提就设置好ID的场景,不适合动态布局的场景

   第二种方法:

在一些比较复杂的Layout中,特别是涉及到在View的焦点变化的过程中还要控制view的背景以及字体颜色变化等。必须对每个ImageButton 设置焦点捕获实际(setOnFocusChangeListener),在该监听事件中处理

[java] view
plain copy

 





ImageButton.setOnFocusChangeListener(){   

          public void onFocus(boolean Focus){   

                   if( Focus ){  

                    // ImageButton 2.1 获焦时, ImageButton 2.1 改变获取焦点背景, ImageButton 1.1也改变失去焦点背景   

                    } else{  

                     //  ImageButton 2.1 获焦时,  ImageButton 2.1 改变失去焦点背景 ,  ImageButton 3.1也改变获取焦点背景    

                    }  

  然后使用Key事件分发来确定焦点移动方向,一般可以使用onKeyDown事件进行处理

[java] view
plain copy

 





public void OnKeyDown(int keyCode, KeyEvent event){  

                    if( event.KEYCODE_DROP_UP== keyCode ){  //如果按下的是上键  

                            mImgBtnArray1[ThirdIndx ].requestFocus;  

                     }  

                    if( event.KEYCODE_DROP_DOWN == keyCode ){  //如果按下的是下键  

                              mImgBtnArray3[ ThirdIndx ].requestFocus;  

                     }  

                    if( event.KEYCODE_DROP_LEFT == keyCode ){  //如果按下的是左键  

                              mImgBtnArray1[ ThirdIndx-1 ].requestFocus;  

                     }  

                    if( event.KEYCODE_DROP_RIGHT == keyCode ){  //如果按下的是右键  

                              mImgBtnArray1[ ThirdIndx+1 ].requestFocus;   

                     }  

       }  

    接下来讲讲TV开发中需要了解的KeyCode 可以参考下Android常用的物理按键及其触发事件此博客讲解的按钮事件

 常用的按键Code有 

  KEYCODE_MENU 菜单键

* 方向键  

 * KEYCODE_DPAD_CENTER 

 * KEYCODE_DPAD_UP  

 * KEYCODE_DPAD_DOWN  

 * KEYCODE_DPAD_LEFT  

 * KEYCODE_DPAD_RIGHT 

      在按键过程中 按下和松开的Action主要是ACTION_DOWN、ACTION_UP  事件分发和处理是在 ACTION_DOWN
中处理

此处需要特别说明的是    View.setFocusable(true);   改变控件是否可以获得焦点,然而同时会触发 setOnFocusChangeListener事件 

   接下来将会讲解在TV开发中所涉及到的控件使用技巧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android TV 开发