了解:

接触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

Logo

智屏生态联盟致力于大屏生态发展,利用大屏快应用技术降低开发者开发、发布大屏应用门槛

更多推荐