感谢分享 http://www.7po.com/thread-564068-1-1.html

第一种方法:

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

第二种方法:

在一些比较复杂的Layout中,特别是涉及到在View的焦点变化的过程中还要控制view的背景以及字体颜色变化等。

比如:在有多个Layout(假设有Layout1, Layout2, Layout3,每个Layout中都有若干个ImageButton),

当你从Layout1中的某个ImageButton 1.1中移动Layout2中ImageButton 2.1,此时ImageButton 1.1要标识为被选中,但是失去焦点,此时ImageButton 2.1是选中并且获取焦点,再从ImageButton 2.1移到ImageButton 3.1的过程中也是这种情况。

对于这样一种情况,你必须对每个ImageButton 设置焦点捕获实际(setOnFocusChangeListener),在该监听事件中处理,

(注:下面代码即兴写的,大概就是这个意思 –^_^– )

  1. <code class="hljs java">ImageButton.setOnFocusChangeListener(){
  2. public void onFocus(boolean Focus){ 7 }8 a7 c5 d  Z# Q) \  M. s1 s
  3. if( Focus ){
  4. // ImageButton 2.1 获焦时, ImageButton 2.1 改变获取焦点背景, ImageButton 1.1也改变失去焦点背景 / \$ l0 |0 j% ]8 c. T7 h
  5. } else{
  6. //  ImageButton 2.1 获焦时,  ImageButton 2.1 改变失去焦点背景 ,  ImageButton 3.1也改变获取焦点背景  3 H* l9 C+ n  y( c- Q& L$ e/ c8 o
  7. }# r7 ^9 W1 ]; L( h& W7 E( u& Z
  8. }% x1 S2 E4 W. e" J* ]4 \  `
  9. }</code>

复制代码

还有就是当你当前焦点移动到ImageButton 3.1上时,你有时需要知道此时Layout1、Layout2上是哪个ImageButton 被选中,因此你还必须设置三个ImageButton 变量(标识选中哪个布局中的那个ImageButton 对象),和三个int变量(标识选中哪个布局中的第几个)。

通过这些标识,你就可以很方便的了解到那个聚焦和哪个失去焦点了。

对于进行上下左右的控制,此时就要在OnKeyDown事件中进行捕获处理了。由于事先已经知道是哪个Layout中的哪ImageButton被选中了,而此时你进行上下左右操作是在你被选中的View上进行操作的,因此在OnKeyDown中你只需先判断是哪个View被选中,然后根据按键事件来移动View(通过之前设置的int标识进行移动)

(注:由于是即兴写的,可能部分代码有错误,这里只是描述这个意思,–^_^–)

假设Layout1中被选中的ImageButton为mFirstImgBtn, 序号为mFirstIndx;

Layout3中被选中的ImageButton为mThirdImgBtn, 序号为mThirdIndx;

每个Layout里面的ImageButton均在一个数组中,
假设分别为:ImageButton mImgBtnArray1[], mImgBtnArray2[], mImgBtnArray3[]

  1. <code class="hljs cs">当前被选中的view为   mSenondImgBtn' |( j: b7 U( w8 S$ k  O+ p
  2. public void OnKeyDown(int keyCode, KeyEvent event){
  3. if( event.KEYCODE_DROP_UP== keyCode ){  //如果按下的是上键- i' D' Y0 J1 S. c
  4. mImgBtnArray1[ThirdIndx ].requestFocus;- j( T" B" f* S5 l; A2 }
  5. }. Y  _( R5 ?9 D
  6. if( event.KEYCODE_DROP_DOWN == keyCode ){  //如果按下的是下键% |( u! c* ^+ z: ^5 |) O* u5 y
  7. mImgBtnArray3[ ThirdIndx ].requestFocus;
  8. }
  9. if( event.KEYCODE_DROP_LEFT == keyCode ){  //如果按下的是左键: E# o& k( N, Z2 ^+ c3 s
  10. 1 d3 p8 @+ h' y, F
  11. mImgBtnArray1[ ThirdIndx-1 ].requestFocus;
  12. }
  13. if( event.KEYCODE_DROP_RIGHT == keyCode ){  //如果按下的是右键
  14. 9 N9 S' ?# f( f+ W: g: Z
  15. mImgBtnArray1[ ThirdIndx+1 ].requestFocus; + ~* E# u  t$ A* X/ {2 Q0 p, ]' v
  16. # f. W! c6 y5 w$ n; }
  17. }. J/ W' R' ]# Q( n
  18. }</code>8 R& M. W3 ~7 E- y- [

复制代码

6 |9 `- i+ p+ D% w; i( C
而具体的获焦事件处理则在每个View的 OnFocusChangeListener 事件中处理。

Android TV 智能电视/盒子 APP 开发焦点控制 两种方法实例相关推荐

  1. Android实时打印kernel和App log(两种方法)

    1.第一种 #!/system/bin/sh while [ 1 ] do sleep 1 dmesg >> kernel.log && logcat -v time &a ...

  2. android 热更新 方案,热更新-热更新app开发的两种系统方案!

    针对app开发工作人员来讲,除开要会编码,热更新也是一定要学好和把握的方法,从技术性视角而言,热更新对Android和iOS各自有不一样的系统软件方案,为了更好地让大伙儿掌握这二种系统方案的差别,今日 ...

  3. 电视android已停止运行是什么意思,智能电视提示应用停止运行,三种方法亲测有效!...

    原标题:智能电视提示应用停止运行,三种方法亲测有效! 智能电视使用时间一长,或者是使用不当总会出现一些问题,当电视机页面出现"某软件"已经停止运行提示的时候,是什么原因导致的?自己 ...

  4. android fragment传递参数_fragment之间传值的两种方法

    在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...

  5. Mixly第三方库开发的两种方法——U8g2库二次开发

    Mixly第三方库开发的两种方法--U8g2库二次开发 前言 方法一:自定义库 1.创建库文件夹 2.开始编程 2.1.定义图形块的基本信息 2.2.定义图形块的外观样式 2.3.定义图形块与C语言的 ...

  6. android 获取当前时间精确到毫秒的两种方法

    1.概述 在android app开发中,在项目中有些功能需求要求要获取当前时间精确到毫秒,已便于完成功能开发的需要,而在android 的系统api中提供了SimpleDateFormat和Cale ...

  7. 【mybatis基础】mybatis开发dao两种方法

    mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀的持久层的框架,是apache下的顶级项目.mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.mybat ...

  8. android字符串加删除线,android TextView 设置和取消删除线的两种方法

    一.TextView 设置删除线有两种方式: (推荐)方式一: 通过按位或运算符|,将 TextView 原本的 Flags 属性和删除线一块设置.setPaintFlags内会对 TextView ...

  9. android手机连接电视,手机连接电视机的四种方法

    描述 MHL连接 1.启动电视后,用一根MHL线连接手机数据接口与电视HDMI接口,并将MHL线的USB供电接口插入电源,可以避免因为电量过低导致显示屏闪屏,黑屏问题. 2.在电视机的输入信号里,选择 ...

最新文章

  1. 如何定制一款12306抢票浏览器——用户界面
  2. oracle存储过程详解--游标 实现增、删、改、查的
  3. Mocha and Red and Blue 模拟字符串
  4. 笔记-项目采购管理-规划采购管理
  5. AWK如何打印从某一列到最后一列的内容
  6. rest接口自动化测试_REST服务的自动化测试
  7. 信奥中的数学:二次互反律
  8. Hive(二)——数据类型与文件格式
  9. TypeScript算法专题 - blog1.基于TypeScript语言的单链表实现
  10. FlightGear
  11. GSCOOLINK GSV2006替CH6002 HDMI2.0接口芯片
  12. android 歌曲的流派信息,音乐流派分类介绍.doc
  13. docker的离线安装方法和网络源安装方法、内网环境linux脚本批量安装docker、安装docker-compose
  14. Linux系统日志分析与管理
  15. 小飞升值记——(4)
  16. java打开客户端程序_Java客户端服务器应用程序 - 已在使用的地址:connect
  17. 一加7使用adb强制90hz时遇到的问题
  18. WS2812 RGB灯
  19. A Univariate Bound of Area Under ROC 论文小结
  20. 推荐个免费ppt模板下载网站

热门文章

  1. 私家QQ无本生利赚钱法
  2. PyQt5 使用QCustomPlot2动态绘制频谱瀑布图(一)
  3. SAS学习笔记1——基础知识(库、PDV、变量选择、观测值排序、创建新变量
  4. openfalcon架构详解
  5. 什么是事件委托?什么时候用?
  6. java爬去指定网页的内容_JAVA使用Gecco爬虫 抓取网页内容(示例代码)
  7. dfp方法例题_最优化之DFP算法考试题
  8. Idea Java 快捷键整理
  9. 一看就会,效率翻倍!摹客在线设计必会技能(基础篇)
  10. 【游戏开发】关于Direct X(六)绘制蝙蝠着色器