1.常用的adb命令

2.ui适配方案

3.Leanback库简介

4.焦点处理

5.Listview GridView和recycler和自定义Recycler view动态添加view

6.按键失灵的解决办法,按键事件如何分发?

7.播放视频的功能

8.剧集控件绘制

9.Metro

10.和手机app开发的区别

1.调试盒子。

盒子的ip地址与电脑的ip地址保持一致

adb connect ip地址

adb uninstall 包名

2.焦点控制需要的一些方法。

requestFocus() //获得焦点

setNextFocusXXX//就是让下一个按上下左右键聚焦的view

可想而知,手机端我们直接通过点击\长按某个区域处理响应事件处,但是TV端只能通过遥控器的上下左右来操控焦点,从而选中特定的区域处理相应事件。

在TV开发中没有以前我手机端的dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent 事件来分发,而需要使用dispatchKeyEvent、onKeyDown、onKeyLisenter 等事件来分发处理焦点事件传递。

然而TV端焦点没有什么好办法可以全局控制焦点,需要我们自己来想办法规定焦点走向,一旦焦点没有处理好就会造成焦点丢失。

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

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

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

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

android:nextFocusLeft:(当按下键时)下一个获得焦点的控件

android:nextFocusRight:(当按下键时)下一个获得焦点的控

**注意:**如果按下某个方向键时,想让焦点停留在自身,可以使用android:nextFocusRight:"@null"或者android:nextFocusRight:"@id/自身id"

3.Recyclerview的用法

TV布局:1.如果是简单的页面(死界面),建议直接就用textview直接布局,焦点逻辑用setNextFocusXXX就可以了。像这种:

动态界面:较复杂的那种,就需要自定义recyclerview,像:

主要是一个recyclerview来布局这个页面,用到recyclerview的分类,gridlayout的“合并单元格”的知识点。这个已经总结过了。下面开始总结我开发中问道的头疼的问题。

.滑动焦点错乱了

.当页面遥控器控制不了滑动了怎么办

.如何判定分页以及分页加载刷新后焦点逻辑

.删除后我的焦点该如何控制

.导航栏下来如何保存导航的状态以及第一个聚焦的始终是第一个item。

滑动焦点错乱了

.当遥控一直按住的时候,突然不知道焦点飞哪去了。

1.看看position是否在乱跳,我的主要是position乱跳导致焦点乱跳,然后我把布局都用LinearLayout限定宽高解决的

2.当遥控器按到底部的时候,如果底部还有数据但并没有显示在屏幕上,可能也会导致焦点乱跳。所以尽量让底部的界面露出来一些像上图一样。当然也可代码判断当焦点失去的时候,让页面先滑上来一些

3.什么去除recyclerview的动画以及写找不到焦点的处理方法

private void initView() {

setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);

setHasFixedSize(true);

setWillNotDraw(true);

setOverScrollMode(View.OVER_SCROLL_NEVER);

setChildrenDrawingOrderEnabled(true);

setClipChildren(false);

setClipToPadding(false);

setClickable(false);

setFocusable(true);

setFocusableInTouchMode(true);

/**

防止RecyclerView刷新时焦点不错乱bug的步骤如下:

(1)adapter执行setHasStableIds(true)方法

(2)重写getItemId()方法,让每个view都有各自的id

(3)RecyclerView的动画必须去掉

*/

setItemAnimator(null);

}

onSearchFocusfailed方法百度很多,我没用到过

当页面遥控器控制不了滑动了怎么办

当遥控器向下按时没问题的,但向上按的时候滑不上去了比如下图:

此时屏幕上部应该还有数据,但并不显示在屏幕上,此时如果焦点在第一个item上,遥控器向上按就没反应,超出屏幕的部分应该是获取不到焦点的。

1)processKeyEvent方法的具体实现

private int processKeyEvent(QueuedInputEvent q) {

final KeyEvent event = (KeyEvent)q.mEvent;

//由dispatchKeyEvent进行焦点的分发,如果dispatchKeyEvent方法返回true,那么下面的焦点查找步骤就不会继续了。

//这里mView是Activity的顶层容器DecorView,是一FrameLayout。

//所以这里的dispatchKeyEvent方法执行的是ViewGroup的dispatchKeyEvent()方法

if (mView.dispatchKeyEvent(event)) {

return FINISH_HANDLED;

}

// 是否终止事件

// 当根视图不存在就会停止下面的步骤

// 属于保护措施

if (shouldDropInputEvent(q)) {

return FINISH_NOT_HANDLED;

}

int groupNavigationDirection = 0;

//对TAB键做特殊处理

//判断仅按下TAB还是TAB和其他键的组合

//metaStateHasModifiers()方法根据指定的META状态按下指定的按键键,则返回true.如果按下不同的修改键组合,则返回false.

//通过下面的方法判断groupNavigationDirection的方向

if (event.getAction() == KeyEvent.ACTION_DOWN

&& event.getKeyCode() == KeyEvent.KEYCODE_TAB) {

if (KeyEvent.metaStateHasModifiers(event.getMetaState(), KeyEvent.META_META_ON)) {

groupNavigationDirection = View.FOCUS_FORWARD;

} else if (KeyEvent.metaStateHasModifiers(event.getMetaState(),

KeyEvent.META_META_ON | KeyEvent.META_SHIFT_ON)) {

groupNavigationDirection = View.FOCUS_BACKWARD;

}

}

... ... ...

// 应用 fallback 策略

// 具体实现见PhoneFallbackEventHandler中dispatchKeyEvent()方法

// 主要是对媒体键,音量键,通话键等做处理,如果是这些按键则会停止下面的步骤

if (mFallbackEventHandler.dispatchKeyEvent(event)) {

return FINISH_HANDLED;

}

// 自动追踪焦点

// 该部分是重点

if (event.getAction() == KeyEvent.ACTION_DOWN) {

if (groupNavigationDirection != 0) {

//如果是TAB键则groupNavigationDirection不为0,进行如下操作(这里不做重点解析)

if (performKeyboardGroupNavigation(groupNavigationDirection)) {

return FINISH_HANDLED;

}

} else {

//此处是对我们按键焦点处理的重点

//下面我们进入该方法详细去看一下,详见(2)

if (performFocusNavigation(event)) {

return FINISH_HANDLED;

}

}

}

return FORWARD;

}

参考博客:音视频大神《何俊林》

https://blog.csdn.net/hejjunlin/article/list/5?

https://blog.csdn.net/Coder_Hcy/article/details/80321939

Android TV开发 TCL电视开发实战 ui适配和焦点控制 Recyclerview自定义相关推荐

  1. android 仿今日头条_Android今日头条UI适配完善版

    作者:xcheng_ 链接:https://www.jianshu.com/p/41930fde7aac 前言 众所周知 android的碎片化一直困扰着开发者,我们要花很多的时间去做UI适配的工作. ...

  2. Android 目前最稳定和高效的UI适配方案

    Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解.刚好,近期准备对糗事百科Android客户端设计 ...

  3. android如何获取电视的存储空间,Android TV (二)(处理电视硬件)

    电视硬件基本上不同于其他Android设备.电视不包含一些硬件特性相比于其他电视设备,例如触屏.相机.GPS.电视也完全依赖于二次硬件设备.为了使用户和应用之间能够交互,必须使用远程遥或者游戏手柄.当 ...

  4. android tv keep,Keep电视版

    Keep电视版帮你通过电视端和手机端结合来为你定制优秀的健身计划,软件融合了跑步.骑行.健身等多项功能帮助用户塑造完美身材,软件内也会对你每日所做的训练进行数据记录来做整体的统筹,适合喜欢运动却又没时 ...

  5. android 仿 tv 菜单,Android TV 开发之仿泰捷视频最新 TV 版 Metro UI 效果

    Some Android TV related Sample 更多TV相关,欢迎关注公众号: Android TV开发交流群:135622564 1.Imitation of tai jie late ...

  6. android tv intel x86,Android TV x86 发布:吃灰老电脑秒变高清盒子

    新酷产品第一时间免费试玩,还有众多优质达人分享独到生活经验,快来新浪众测,体验各领域最前沿.最有趣.最好玩的产品吧~!下载客户端还能获得专享福利哦! 原标题:Android TV x86 发布:吃灰老 ...

  7. android盒子安装windows,Android TV x86发布:吃灰老电脑秒变高清盒子

    新酷产品第一时间免费试玩,还有众多优质达人分享独到生活经验,快来新浪众测,体验各领域最前沿.最有趣.最好玩的产品吧~!下载客户端还能获得专享福利哦! 安卓是一个非常灵活的平台,可以用在各种各样的设备上 ...

  8. Android TV Demo 工程,其中包含 TV 常用的自定义控件,飞框效果实现,外边框效果实现,UI 控件焦点自动处理,使 TV 开发更简单,更高效。

    TVLibraryDemo 项目地址:zhangtiansheng/TVLibraryDemo  简介:Android TV Demo 工程,其中包含 TV 常用的自定义控件,飞框效果实现,外边框效果 ...

  9. Android TV UI开发常用知识

    导入依赖 Google官方为Android TV的UI开发提供了一系列的规范组件,在leanback的依赖库中,这里介绍一些常用的组件,使用前需要导入leanback库. implementation ...

最新文章

  1. java 方法里面定义接口_java – 当接口A在其方法签名中定义接口B时
  2. 给GridView删除列添加删除提示
  3. C++静态库与动态库(简介)
  4. 看看这些被同事喷的 JS 代码风格你写过多少
  5. C#LeetCode刷题之#860-柠檬水找零(Lemonade Change)
  6. My97DatePicker 组件使用方法---My97DatePicker
  7. 责任链模式(Chain of Responsibility Pattern)
  8. linux模板机配置文件,制作Centos 7.4操作系统模板机
  9. CF 964C Alternating Sum
  10. pyspark用法2
  11. SpringBoot 整合SpringSecurity示例实现前后分离权限注解+JWT登录认证
  12. jQuery源码下载和编译
  13. 自动化测试常见问题总结
  14. 苏宁“北京攻略”:老阵地,新战场 | 一点财经
  15. AutoIt3常见问题解答
  16. 书籍推荐:国内第一本ASP.NET 3.5 MVC技术专著
  17. 利用redis生成订单号
  18. Mac 活动监视器 闪退 打不开
  19. FFmpeg流拼接滤镜concat原理与使用注意事项
  20. 解决CSS IOS字体自动调整放大了

热门文章

  1. Android 颜色操作(对比、混合)
  2. 怎么使用命令行查看mysql版本号_查看MySql版本号命令
  3. KMeans算法( 聚类分析)
  4. tp3.2中企业向个人微信钱包零钱付款
  5. 《Netty权威指南》-李林峰
  6. 如何应用R语言读取gz, bgz文件
  7. 主动学习(Active Learning,AL)综述
  8. 无尽对决一直显示正在连接服务器,打开无尽对决提示网络异常或者连接不上
  9. logrotate 的使用简介
  10. 全局禁用backspace事件