androidtv开发
❶ 做Android TV开发,需要用到一个功能,在界面上按 上,右,右三个键,开启大招(启动另一个a
重新onKeyDown方法。
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER||keyCode == KeyEvent.KEYCODE_ENTER) {
拦截中间键按下
}
keyCode == KeyEvent.KEYCODE_DPAD_UP
拦截上键按下
keyCode == KeyEvent.KEYCODE_DPAD_DOWN
拦截下键按下
keyCode == KeyEvent.KEYCODE_DPAD_LEFT
拦截左键按下
keyCode == KeyEvent.KEYCODE_DPAD_RIGHT
拦截右键按下
keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0
拦截返回键按下
当按下 上下两键时弹出一个popwindow来展示选集,这时弹出来的popwindwo没有焦点,所以在创建popwindow时就要给它设置获得焦 点 mSelectionsWindow.setFocusable(true);这样popwindow里的不管listview还是gridview都能用遥控器上下左右键控制了。
可是这时返回键失效了,不能退出了,因为焦点都在popwindow上了,给popwindow设置setBackgroundDrawable这样点击返回键时popwindow就会消失掉。
如果想让popwindow过个几秒钟自己消失,还要重新onKeyUp 扑捉按键抬起,在按键抬起时给handler发消息就能实现了。
❷ Android TV开发中怎么设置全局焦点框
=L= LZ您好 那个dsoid我也有下 LZ您说的开发者选项里只有强制GPU渲染是没什么提高性能的选项的 除了那个运行模式 lz勾上性能模式的话 就是四核最高频率锁死运行了 还有LZ模拟器吃的是GPU。。。。比如07年代配置的电脑PC端NDS模拟器都有点吃不动 别说现在移动领域GPU的性能了 还有其实LZ那个模拟器帧数问题是两方面 一就是我们面临的 机器本身性能问题 二是模拟器开发者优化问题(其实这个是主要)LZ我建议你洗洗睡吧 现在ndsl也不贵啊 1000不到。。。。
❸ Android TV 焦点原理源码解析
相信很多刚接触AndroidTV开发的开发者,都会被各种焦点问题给折磨的不行。不管是学技术还是学习其他知识,都要学习和理解其中原理,碰到问题我们才能得心应手。下面就来探一探Android的焦点分发的过程。
Android焦点事件的分发是从ViewRootImpl的processKeyEvent开始的,源码如下:
源码比较长,下面我就慢慢来讲解一下具体的每一个细节。
dispatchKeyEvent方法返回true代表焦点事件被消费了。
ViewGroup的dispatchKeyEvent()方法的源码如下:
(2)ViewGroup的dispatchKeyEvent执行流程
(3)下面再来瞧瞧view的dispatchKeyEvent方法的具体的执行过程
惊奇的发现执行了onKeyListener中的onKey方法,如果onKey方法返回true,那么dispatchKeyEvent方法也会返回true
可以得出结论:如果想要修改ViewGroup焦点事件的分发,可以这么干:
注意:实际开发中,理论上所有焦点问题都可以通过给dispatchKeyEvent方法增加监听来来拦截来控制。
(1)dispatchKeyEvent方法返回false后,先得到按键的方向direction值,这个值是一个int类型参数。这个direction值是后面来进行焦点查找的。
(2)接着会调用DecorView的findFocus()方法一层一层往下查找已经获取焦点的子View。
ViewGroup的findFocus方法如下:
View的findFocus方法
说明:判断view是否获取焦点的isFocused()方法, (mPrivateFlags & PFLAG_FOCUSED) != 0 和view 的isFocused()方法是一致的。
其中isFocused()方法的作用是判断view是否已经获取焦点,如果viewGroup已经获取到了焦点,那么返回本身即可,否则通过mFocused的findFocus()方法来找焦点。mFocused其实就是ViewGroup中获取焦点的子view,如果mView不是ViewGourp的话,findFocus其实就是判断本身是否已经获取焦点,如果已经获取焦点了,返回本身。
(3)回到processKeyEvent方法中,如果findFocus方法返回的mFocused不为空,说明找到了当前获取焦点的view(mFocused),接着focusSearch会把direction(遥控器按键按下的方向)作为参数,找到特定方向下一个将要获取焦点的view,最后如果该view不为空,那么就让该view获取焦点。
(4)focusSearch方法的具体实现。
focusSearch方法的源码如下:
可以看出focusSearch其实是一层一层地网上调用父View的focusSearch方法,直到当前view是根布局(isRootNamespace()方法),通过注释可以知道focusSearch最终会调用DecorView的focusSearch方法。而DecorView的focusSearch方法找到的焦点view是通过FocusFinder来找到的。
(5)FocusFinder是什么?
它其实是一个实现 根据给定的按键方向,通过当前的获取焦点的View,查找下一个获取焦点的view这样算法的类。焦点没有被拦截的情况下,Android框架焦点的查找最终都是通过FocusFinder类来实现的。
(6)FocusFinder是如何通过findNextFocus方法寻找焦点的。
下面就来看看FocusFinder类是如何通过findNextFocus来找焦点的。一层一层往下看,后面会执行findNextUserSpecifiedFocus()方法,这个方法会执行focused(即当前获取焦点的View)的findUserSetNextFocus方法,如果该方法返回的View不为空,且isFocusable = true && isInTouchMode() = true的话,FocusFinder找到的焦点就是findNextUserSpecifiedFocus()返回的View。
(7)findNextFocus会优先根据XML里设置的下一个将获取焦点的View ID值来寻找将要获取焦点的View。
看看View的findUserSetNextFocus方法内部都干了些什么,OMG不就是通过我们xml布局里设置的nextFocusLeft,nextFocusRight的viewId来找焦点吗,如果按下Left键,那么便会通过nextFocusLeft值里的View Id值去找下一个获取焦点的View。
可以得出以下结论:
1. 如果一个View在XML布局中设置了focusable = true && isInTouchMode = true,那么这个View会优先获取焦点。
2. 通过设置nextFocusLeft,nextFocusRight,nextFocusUp,nextFocusDown值可以控制View的下一个焦点。
Android焦点的原理实现就这些。总结一下:
为了方便同志们学习,我这做了张导图,方便大家理解~
❹ Android TV(一)(入门准备)
以下内容是对Google Android TV文档的翻译,可能存在错误,请读者以官方文档为准
官方地址
在文档中Google对Android TV的提出了许多要求,如果你只是使用它的一些UI元素,你可以不用太注意这些要求。
官方地址 镜像地址
TV应用在手机和平板电脑上使用相同的项目结构。这意味着你可以修改已经存在的应用使其在电视设备上运行或者在你已知的Android知识上创建新的应用。这部分内容主要是准备开发环境和开发TV应用的一些最低要求。(开发TV应用和手机应用本质是一致的,下面的一些要求只是你要使用到一些Google的库(Leanback support)或者要将应用在GooglePlay上线,否则,要求不必遵守)
Supported Media Formats
DRM
android.drm
ExoPlayer
android.media.MediaPlayer
这一部分主要关于如何修改一个已存在的Android项目或者创建一个新的项目。
下面是让app在电视设备上运行的主要部分:
1.Activity for TV,在manifest中声明一个activity。
2.TV Support Libraries
1.SDK tools version 24.0.0 或者更高
2.SDK with android5.0 或者更高
3.创建或更新项目(如果你要修改已存在的Android项目应该是该项目的target为5.0或者更高)
可以兼容到API17
如果一个应用打算运行在电视设备上它必须在manifest文件中声明一个TV activity。如下:
如果设置required属性为true,你的APP在设备上将只运行leanback ui。
运行在TV设备上的应用不需要通过触摸屏幕来输入。
v17 leanback library 为电视应用程序提供用户界面部件,特别是用于媒体播放的应用程序。
v7 recyclerview library
v7 cardview library
在完成上述步骤之后,是时候开始为大屏幕构建应用程序了!检查这些额外的主题,以帮助您建立您的应用程序的电视:
构建电视播放应用
帮助用户搜索内容
Building TV Games
Building TV Channels