从去年开始搞Android TV应用开发差不多快一年了,虽然中间有个几个月没搞,不过现在总算还是回到正轨上来了,所以记录一下自己的一些收获和体会,大家有什么好的建议也欢迎留言分享,本文不间断更新。这里有TV开发的QQ群【522186932】,欢迎大家,群主是个很厉害的人(群主不是我哈)。这里有群主写的一些TV开发常用的控件。TV开发常用控件
1、国内的智能电视,盒子的android系统其实都是手机系统改造来的,对手机系统进行了一些删减,比如没有了通知栏等。所以大家不要在AndroidTV的SDK上进行开发。
2、很多用户的电视屏幕显示效果很糟糕,因此建议你们的UI设计在进行设计的时候,不要选用比较淡的颜色,对于点击、选中效果时,几种颜色也不要太相近。
3、因为TV应用大部分时候是依靠遥控器来进行操作的,因此焦点的显示就比较重要了。我们需要高亮或者放大当前焦点所在的控件。放大其实也可以通过在上面覆盖一个popupwindow或者dialog来实现,不一定非要直接对UI控件进行放大。
【关于Android TV应用开发的心得体会】4、焦点移动问题。尽量还是依靠系统去控制焦点的移动,实在不行的时候,我们一般选用以下方法来控制焦点的移动问题。
第一个是在xml中,代码如下:
//这里表示,当焦点在当前控件时,按下遥控器的左、右、上、下时焦点将会移向的控件
android:nextFocusLeft=""
android:nextFocusRight=""
android:nextFocusUp=""
android:nextFocusDown=""
当然代码里也有类似的方法:
mView.setNextFocusUpId();
mView.setNextFocusDownId();
mView.setNextFocusLeftId();
mView.setNextFocusRightId();
其他控制焦点的一些方法还有拦截按键,然后通过requestFocus()方法强制抢占焦点。
5、在需要用户进行输入的地方,最好是自己在合适的地方写一个软键盘,理想的键盘应该是下面这样的:
文章图片
6、关于屏幕适配方案。因为电视屏幕分辨率比较少,因此可以考虑多写几套dimens就行了。
7、控件放大后被其他控件挡住怎么办?请重写该控件所在的ViewGroup的getChildDrawingOrder()方法,当然首先你需要setChildrenDrawingOrderEnabled(true)。至于具体的使用方法,可以百度方法名就知道了。这里就是更改绘制顺序的问题。
8、盒子和智能电视的ROM都很小,因此不用的文件还是尽快删除掉比较好。另外虽然盒子不用考虑耗电的问题,但是盒子性能都不怎么样,所以还是需要考虑性能优化的问题。主要还是大图片的处理,因为电视会遇到更多大图片。至于优化方案,我暂时也是用的图片加载框架来加载图片,不知道各位在这方面还有更好的建议没有?
9、有些时候焦点移动不太符合预期,尝试过nextFocus也不理想的时候,可以考虑拦截按键,当然很多时候在Activity里面拦截是比较麻烦的,可以考虑自定义控件,然后重写dispatchKeyDown方法来拦截按键,实现对焦点移动的控制