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

  之前一直从事手机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
 在CODE上查看代码片派生到我的代码片
  1. ImageButton.setOnFocusChangeListener(){   
  2.           public void onFocus(boolean Focus){   
  3.                    if( Focus ){  
  4.                     // ImageButton 2.1 获焦时, ImageButton 2.1 改变获取焦点背景, ImageButton 1.1也改变失去焦点背景   
  5.                     } else{  
  6.                      //  ImageButton 2.1 获焦时,  ImageButton 2.1 改变失去焦点背景 ,  ImageButton 3.1也改变获取焦点背景    
  7.                     }  
  然后使用Key事件分发来确定焦点移动方向,一般可以使用onKeyDown事件进行处理

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public void OnKeyDown(int keyCode, KeyEvent event){  
  2.                     if( event.KEYCODE_DROP_UP== keyCode ){  //如果按下的是上键  
  3.                             mImgBtnArray1[ThirdIndx ].requestFocus;  
  4.                      }  
  5.                     if( event.KEYCODE_DROP_DOWN == keyCode ){  //如果按下的是下键  
  6.                               mImgBtnArray3[ ThirdIndx ].requestFocus;  
  7.                      }  
  8.                     if( event.KEYCODE_DROP_LEFT == keyCode ){  //如果按下的是左键  
  9.                               mImgBtnArray1[ ThirdIndx-1 ].requestFocus;  
  10.                      }  
  11.                     if( event.KEYCODE_DROP_RIGHT == keyCode ){  //如果按下的是右键  
  12.                               mImgBtnArray1[ ThirdIndx+1 ].requestFocus;   
  13.                      }  
  14.        }  
    接下来讲讲TV开发中需要了解的KeyCode 可以参考下Android常用的物理按键及其触发事件此博客讲解的按钮事件

 常用的按键Code有 

  KEYCODE_MENU 菜单键

  1. * 方向键  
  2.  * KEYCODE_DPAD_CENTER 
  3.  * KEYCODE_DPAD_UP  
  4.  * KEYCODE_DPAD_DOWN  
  5.  * KEYCODE_DPAD_LEFT  
  6.  * KEYCODE_DPAD_RIGHT 

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

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

   接下来将会讲解在TV开发中所涉及到的控件使用技巧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值