关于AndroidTv端的小白理解
了解:接触AndroidTV端时间不长,也就一个月左右。相对于手机端,最大的区别在于多了一个焦点(focus)控制。也就是说,电视端是用遥控器的焦点红外线控制代替了手机端的滑动,按钮点击跟手机的点击事件是一样的。关于焦点:在XML布局文件中,我们可以在基本每个控件中找到一个focused属性,把这个属性设置为true时,就赋予了这个控件一个焦点,就可以使用遥控器来控制这个控件的选中样式或者点击事件
了解:
接触AndroidTV端时间不长,也就一个月左右。相对于手机端,最大的区别在于多了一个焦点(focus)控制。也就是说,电视端是用遥控器的焦点红外线控制代替了手机端的滑动,按钮点击跟手机的点击事件是一样的。
关于焦点:
在XML布局文件中,我们可以在基本每个控件中找到一个focused属性,把这个属性设置为true时,就赋予了这个控件一个焦点,就可以使用遥控器来控制这个控件的选中样式或者点击事件。
对于电视端来说,焦点是自动找寻的,也就是说,如果你不指定默认焦点的话,进入界面后,系统会自动默认最左上角为第一个焦点,按遥控器的上下左右键也会自动找寻下一个最近的焦点。这样有一个好处是方便快捷,不需要设置每一个焦点的下个焦点在哪里。但是如果有需求的话,也是可以指定某个焦点为下一个焦点,在xml布局文件中,在控件熟悉里直接敲next,根据代码提示,可以指定下一个往上下左右的焦点为哪个控件。
抢焦点问题:
这个我不是很了解原理,只能说下我遇到的情况。做过AndroidTV段的都知道,电视端会用到比较多的自定义控件,我发现的问题是,自定义控件的焦点属性是不能禁用的,试过很多种方法,设置focused为false什么的,基本不起作用。最后我的解决办法是:如果你需要禁用一个自定义控件的焦点,那你需要做的操作就是不让焦点到达这个控件,也就是上面提到的,指定下个焦点位置。例如焦点现在在控件A上,下个控件为自定义控件B,你不希望用户控制自定义控件B,或者你想跳过自定义控件B到达控件C,你就可以在xml文件中,控件A的属性中,指定A的下一个方向的焦点为控件C的焦点。
添加选中边框:
//创建一个BorderView BorderView borderView = new BorderView(this); //设置borderView边框的样式,一般使用点9图 // borderView.setBackgroundResource(R.drawable.selected_point9); //attachTo是把borderView边框添加到main 这个布局中 borderView.attachTo(main);
这个是一个飞框的选中效果,从外观角度来说,不是很建议使用,但是我们可以用borderview的选中放大效果,然后在drawable文件夹中重写一个xml文件focused_bg:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:drawable="@drawable/focusedBg"></item> <!--<item android:state_selected="true"--> <!--android:drawable="@drawable/focused_bottom"></item>--> <!--<item android:drawable="@color/gray"/>--> </selector>
注意:focusedBg是一张点9图的资源图片。
然后在需要显示选中效果的控件中设置他的背景属性:
android:background="@drawable/focused_bg"
这样运行项目当焦点在指定控件的时候就会显示对应的选中效果。
还有的以后补充。
2018年4月19日01:46:24
更多推荐
所有评论(0)