android-tv_怎么模拟一个android-tv - CSDN
精华内容
参与话题
  • Android TV

    2020-07-30 23:31:46
    垂直的RecyclerView,并实现了可以控制横向recyclerView的效果。 一些关于自定义的RecyclerView扩展功能效果
  • AndroidTV开发教程(1)

    万次阅读 2016-03-04 16:15:41
    AndroidTV应用开发简介目前,网上还没有对AndroidTV的足够的介绍。在本系列教程中,将介绍如何开发AndroidTV应用程序。此篇文章的主要目的是了解AndroidTV的UI实现。

    AndroidTV应用开发简介

    目前,网上还没有对AndroidTV的足够的介绍。在本系列教程中,将介绍如何开发AndroidTV应用程序。此篇文章的主要目的是了解AndroidTV的UI实现。

    AndroidTV的UI和Android手机App的UI有很大的差异,在AndroidTV中,我们只能用↑↓←→键对应用进行操作,而不是触摸屏幕进行操作。要达到这个要求,Android开源项目提供 Leanback Support library (android.support.v17.leanback)支持库,我们可以基于Leanback库实现适用于AndroidTV用户的操作界面,本教程主要讲解Leanback库的使用。

    本系列教程的程序都是基于AndroidStudio进行开发,请下载安装使用AndroidStudio下载

    此教程使用人群:
    
    • 有开发Android应用的经验
    • 技能等级—中级

    创建一个AndroidTV应用程序

    1.打开AndroidStudio

    New Project

    新建项目

    选择AndroidTV

    选择AndroidTV

    选择“Add No Activity”并且Finish

    Add No Activity

    AndroidStudio自动完成创建程序

    2.添加一个Activity

    首先,我们要添加一个Activity,右击创建的项目“com.corochann.androidtvapptutorial”,选择→New→Activity→Blank activity,选择Launcher Activity。
    会自动命名为MainActivity。
    AndroidStudio会创建两个文件,一个MainActivity.class和activity_main.xml。

    我们在创建Activity的时候,我们也可以找到Android TV Activity,但是我们不选择这个,因为它会同时创建出很多文件。当然,如果你能看懂,它们是很有帮助的,但是对于初次接触的我们来说,要看懂这些东西是很困难的。在此系列文章中,我们会逐步创建这些文件,从而了解他们的用法。
    接下来,我们就开始UI的设计。

    3.添加一个Fragment

    右击你的包名
    New→Java Class→Name:MainFragment

    同样的,如果我们选择创建一个Fragment→Blank fragment,它也会创建很多代码出来。

    首先,我们编译我们的 activity_main.xml让它只包含mainfragment.

    <?xml version="1.0" encoding="utf-8"?>
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_browse_fragment"
        android:name="com.corochann.androidtvapptutorial.MainFragment" android:layout_width="match_parent"
        android:layout_height="match_parent" tools:context=".MainActivity" tools:deviceIds="tv"
        tools:ignore="MergeRootFrame" />

    将MainFragment修改如下
    我们让MainFragment继承BrowseFragment,BrowseFragment是有AndroidSDK提供的,我们可以通过这个教程看到它是怎样作为AndroidTV的标准UI的。

    package com.corochann.helloandroidtvfromscrach;
    
    import android.os.Bundle;
    import android.support.v17.leanback.app.BrowseFragment;
    import android.util.Log;
    
    public class MainFragment extends BrowseFragment {
        private static final String TAG = MainFragment.class.getSimpleName();
    
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            Log.i(TAG, "onActivityCreated");
            super.onActivityCreated(savedInstanceState);
    
        }
    }

    运行此程序
    这就是一个AndroidTV程序

    BrowseFragment由HeadersFragment和RowsFragment组成,在我们这个程序中,右边黑色的部分就是HeadersFragment,左边的部分是RowsFragment,下面我们会说到如何设计HeadersFragment和RowsFragment。

    4.在MainFragment.java中添加一个方法setupUIElements()

    我们将添加一个setupUIElements()方法,来给程序添加更多的信息。

       @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            Log.i(TAG, "onActivityCreated");
            super.onActivityCreated(savedInstanceState);
    
            setupUIElements();
    
        }
    
        private void setupUIElements() {
            // setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.videos_by_google_banner));
            setTitle("Hello Android TV!"); // Badge, when set, takes precedent
            // over title
            setHeadersState(HEADERS_ENABLED);
            setHeadersTransitionOnBackEnabled(true);
    
            // set fastLane (or headers) background color
            setBrandColor(getResources().getColor(R.color.fastlane_background));
            // set search icon color
            setSearchAffordanceColor(getResources().getColor(R.color.search_opaque));
        }

    上面的代码中,我们设置了应用的标题和图标,还有BrandColor。
    颜色信息来自color.xml,我们现在来创建一个
    New→values Resource file
    文件名称:color.xml
    代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="fastlane_background">#0096e6</color>
        <color name="search_opaque">#ffaa3f</color>
    </resources>

    运行程序:
    运行结果

    5.编译Android Manifest

    你会发现在AndroidTV上没有你的应用程序图标,我们需要在Android Manifest中作一些声明

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.corochann.androidtvapptutorial" >
    
    
        <!-- TV app need to declare touchscreen not required -->
        <uses-feature
            android:name="android.hardware.touchscreen"
            android:required="false" />
    
        <!--
         true:  your app runs on only TV
         false: your app runs on phone and TV -->
        <uses-feature
            android:name="android.software.leanback"
            android:required="true" />
    
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/Theme.Leanback" >
            <activity
                android:name=".MainActivity"
                android:icon="@drawable/app_icon_your_company"
                android:label="@string/app_name"
                android:logo="@drawable/app_icon_your_company" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>

    把app_icon_your_company放在main/res/drawble/folder下,运行程序。

    在launcher中显示活动图标

    在Manifest里面设置intent-filter

    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />

    同时,也要在Activity里面声明

    <activity
                android:name=".MainActivity"
                android:icon="@drawable/app_icon_your_company"
                android:label="@string/app_name"
                android:logo="@drawable/app_icon_your_company" >
    
                ...

    显示活动图标

    在launcher上显示应用程序图标

    通过设置application进行显示

    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/Theme.Leanback" >
    
            ...

    注意:活动图标和应用程序图标是不同的
    应用程序图标
    如果想更清楚的弄懂AndroidTV中的Manifest,请查看官方说明需要翻墙
    本文代码可在github下载。
    github地址

    下期见

    展开全文
  • 关于AndroidTv端的小白理解

    千次阅读 2018-04-19 17:50:30
    了解:接触AndroidTV端时间不长,也就一个月左右。相对于手机端,最大的区别在于多了一个焦点(focus)控制。也就是说,电视端是用遥控器的焦点红外线控制代替了手机端的滑动,按钮点击跟手机的点击事件是一样的。...

    了解:

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

    展开全文
  • Android TV开发 开源项目收集

    千次阅读 2019-04-23 14:54:30
    Android TVAndroid手机开发的主要区别在于焦点的控制和焦点效果的不同。 以下是开发过程中收集到的开源项目,记录于此,与大家分享一下. 焦点放大,切换,边框处理,适配问题等。

    Android TV和Android手机开发的主要区别在于焦点的控制和焦点效果的不同。
    以下是开发过程中收集到的开源项目,记录于此,与大家分享一下。

    1. Android TV google官方TV库
      https://github.com/googlesamples/leanback-showcase

    2. 智能电视,电视盒子开发SDK
      https://github.com/boxmate/tvframe

    3. 选中框切换动画,适用于电视
      https://github.com/EZJasonBoy/FocusChangeAnimation

    4. 选中框切换动画,适用于电视
      https://github.com/EZJasonBoy/FocusChangeAnimation

    5. 仿泰捷视频最新TV版 Metro UI效果. 仿腾讯视频TV版(云视听•极光) 列表页
      https://github.com/hejunlin2013/TVSample

    6. tv常用效果控件,包括焦点、边框处理等
      https://github.com/evilbinary/Tvwidget

    7. 欢社区(已失效)
      http://bbs.tvhuan.com/forum.php?gid=37

    8. Android tv,盒子,投影仪 控件
      https://github.com/FrozenFreeFall/Android-tv-widget

    9. TV 项目常用工具(焦点问题,适配问题等.)
      https://github.com/genius158/TVProjectUtils

    大家有关Android TV端的开源项目,欢迎推荐和留言。

    展开全文
  • Android TV开发总结【适配】

    千次阅读 2019-02-15 21:15:44
    Android 的屏幕适配是指适配不同机顶盒 UI 框架层输出的分辨率和 dpi,而不是适配不同分辨率的电视机(电视机的适配交由机顶盒本身完成,和各个应用无关) 之前的文章有介绍过适配相关的问题在和dimens插件,可以...

    前言

    Android 的屏幕适配是指适配不同机顶盒 UI 框架层输出的分辨率和 dpi,而不是适配不同分辨率的电视机(电视机的适配交由机顶盒本身完成,和各个应用无关)

    之前的文章有介绍过适配相关的问题在和dimens插件,可以前往了解:

    Android完美适配dimens.xml脚本

    打造AS酷炫dimens适配插件

    背景知识

    1、什么是屏幕尺寸、屏幕分辨率、屏幕像素密度?

    • 屏幕尺寸是指屏幕对角线的长度。单位是英寸,1英寸=2.54厘米;
    • 屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1像素点,一般是纵向像素横向像素,如1280×720;
    • 屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写,像素密度和屏幕尺寸和屏幕分辨率有关;

    像素密度公式:

    例如:

    600*1024的8寸屏幕 720*1280的8寸屏幕
    这里写图片描述 这里写图片描述

    2、什么是dp、dip、dpi、sp、px?之间的关系是什么?

    • dip:Density Independent Pixels(密度无关像素)的缩写。以160dpi为基准,1dp=1px
    • dp:同dip
    • dpi:屏幕像素密度的单位,“dot per inch”的缩写
    • px:像素,物理上的绝对单位
    • sp:Scale-Independent Pixels的缩写,可以根据文字大小首选项自动进行缩放。Google推荐我们使用12sp以上的大小,通常可以使用12sp,14sp,18sp,22sp,最好不要使用奇数和小数。

    如图:

    3、什么是mdpi、hdpi、xdpi、xxdpi、xxxdpi?如何计算和区分?

    在Google官方开发文档中,说明了 mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 的尺寸比例进行缩放。例如,一个图标的大小为48×48dp,表示在mdpi上,实际大小为48×48px,在hdpi像素密度上,实际尺寸为mdpi上的1.5倍,即72×72px,以此类推。

    适配前准备工作

    1、获取设备分辨率和dpi

    可以通过以下代码获取机顶盒UI框架层实际输出的分辨率 (width * height),以及输出的像素密度和像素密度比值

    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);//display = getWindowManager().getDefaultDisplay();display.getMetrics(dm)(把屏幕尺寸信息赋值给DisplayMetrics dm);
    int width = dm.widthPixels;
    int height = dm.heightPixels;
    // 屏幕密度(1.0 / 1.5 / 2.0)
    float density = dm.density;
    // 屏幕密度DPI(160 / 240 / 320)
    int densityDpi = dm.densityDpi;
    Logger.e("当前设备的分辨率宽=(" + width + "*  高度=" + height + ")  densityDpi =" + densityDpi + "  density=" + density);
    

    输出:

    当前设备的分辨 (率宽=1920*高度=1080)  densityDpi =160  density=1.0
    

    2、与UI沟通如何出图?

    • 切图应该放哪个 drawable 文件夹下,切多大?
    • UI 应该以什么标准出图?
    • UI 出的标注图 px 和 dp之间如何转换?

    举个例子:
    某款盒子通过上述代码获得分辨率为19201080 ,DPI为160dpi,盒子连接的是4K的电视分辨率为38402160:

    • 通过160dpi,根据上表可以得知图片放在drawable-mdpi文件夹下
    • 在只考虑当前设备的情况下,UI应该以盒子的像素19201080出图因为,app 在机顶盒上实际输出的像素就只有19201080像素,而在4K电视上4K显示效果是机顶盒将系统UI框架的 1920*1080 像素的输出优化放大道 3840 * 2160 像素
    • 在160dpi情况下,px与dp是1倍的关系,所以1px = 1dp

    适配规则

    了解了基本知识和出图标准接下来我们来看一下如何适配:

    如果此时我们又有一台设备分辨率为19201080 ,DPI为213dpi,盒子连接的是4K的电视分辨率为38402160:

    我们可以计算一下倍数关系 213/160 = 1.33 ,我们发现并不是上面表格中提供的参数,是个非常奇葩的数字,此时我们计算一下宽度的dp值:1080/1.33=812,所以我们图片和资源文件可以放在values-sw812dpdrawable-sw812dp下面。
    此时dimens文件中的数值也需要转换,两个相差1.33倍,那么 {***现在的dimens数值=(原来的dimens数值 /1.33)***}
    建议使用打造AS酷炫dimens适配插件 本人的插件,方便做dimens适配哦。

    这里只是教大家了一种机型的适配,实际开发中可能会遇到更多奇葩的机型,大家也可以直接使用values-1920x1080或者values-1920x1080-mdpi或者values-sw812dp-mdpi这种组合也可以,道理都是一样的。

    详细过程可以参考官方教程屏幕兼容性概览

    屏幕配置限定符值说明
    smallestWidth sw<N>dp

    示例:
    sw600dp
    sw720dp

    屏幕的基本尺寸,由可用屏幕区域的最小尺寸指定。 具体来说,设备的 smallestWidth 是屏幕可用高度和宽度的最小尺寸(您也可以将其视为屏幕的“最小可能宽度”)。无论屏幕的当前方向如何,您均可使用此限定符确保应用 UI 的可用宽度至少为 <N>dp。

    例如,如果布局要求屏幕区域的最小尺寸始终至少为 600 dp,则可使用此限定符创建布局资源 res/layout-sw600dp/。仅当可用屏幕的最小尺寸至少为 600dp 时,系统才会使用这些资源,而不考虑 600dp 所代表的边是用户所认为的高度还是宽度。smallestWidth 是设备的固定屏幕尺寸特性;设备的 smallestWidth 不会随屏幕方向的变化而改变

    设备的 smallestWidth 将屏幕装饰元素和系统 UI 考虑在内。例如,如果设备的屏幕上有一些永久性 UI 元素占据沿 smallestWidth 轴的空间,则系统会声明 smallestWidth 小于实际屏幕尺寸,因为这些屏幕像素不适用于您的 UI。

    这可替代通用化的屏幕尺寸限定符(小、正常、大、超大), 可让您为 UI 可用的有效尺寸定义不连续的数值。 使用 smallestWidth 定义一般屏幕尺寸很有用,因为宽度 通常是设计布局时的驱动因素。UI 经常会垂直滚动,但 对其水平需要的最小空间具有非常硬性的限制。可用的宽度也是 确定是否对手机使用单窗格布局或是对平板电脑使用多窗格布局 的关键因素。因此,您可能最关注每部 设备上的最小可能宽度。

    可用屏幕宽度 w<N>dp

    示例:
    w720dp
    w1024dp

    指定资源应该使用的最小可用宽度(dp 单位) — 由 <N> 值定义。当屏幕的方向在横屏与竖屏之间切换时,系统对应的 宽度值将会变化,以 反映 UI 可用的当前实际宽度。

    这对于确定是否使用多窗格布局往往很有用,因为即使是在 平板电脑设备上,您也通常不希望竖屏像横屏一样 使用多窗格布局。因此,您可以使用此功能指定布局需要的最小宽度,而 无需同时使用屏幕尺寸和方向限定符。

    可用屏幕高度 h<N>dp

    示例:
    h720dp
    h1024dp
    等等

    指定资源应该使用的最小屏幕高度(dp 单位) — 由 <N> 值定义。当屏幕的方向在横屏与竖屏之间切换时,系统 对应的高度值将会变化,以 反映 UI 可用的当前实际高度。

    使用此方式定义 布局需要的高度很有用,它与使用 w<N>dp 定义 所需宽度的方式相同,无需同时使用屏幕尺寸和方向限定符。 但大多数应用不需要此限定符,考虑到 UI 经常垂直滚动, 因此高度更弹性,而宽度更刚性。

    ~~号外~~福利~~号外~~
    程序员的福音: “老曾筋骨祛痛贴”,百年祖传配方,专治腰间盘肩周颈椎坐骨神经腰腿疼痛等,博主亲测效果非常棒,因长期久坐写代码,坐姿不规范导致脖子疼,腰椎疼,用过之后疼痛逐渐缓解,现在已无任何疼痛,用过后让你写代码一身轻松,so easy,妈妈再也不用担心我们写代码了。
    购买链接: https://k.weidian.com/tja7GYzB

    扫码下方二维码,关注公众号“伟大程序猿的诞生“,回复“膏药”领取优惠券
    扫码关注公众号“伟大程序猿的诞生“,更多干货新鲜文章等着你~

    公众号回复“资料获取”,获取更多干货哦~
    公众号回复“膏药”,领取优惠券哦~

    有问题添加本人微信号“fenghuokeji996” 或扫描博客导航栏本人二维码

    展开全文
  • ScrollView和HorizontalScrollView常用属性,及禁止滑动
  • Android 读取raw、assets中的txt文件

    千次阅读 2018-07-04 13:47:28
    先上图 MainActivity.class package ... import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; i...
  • 树莓派3编译android7.1 tv 国内源码

    千次阅读 2018-01-17 17:46:08
    这里介绍树莓派3编译android7.1 tv,通过国内下载源代码编译的过程。 第一步,下载repo. git clone https://gerrit-google.tuna.tsinghua.edu.cn/git-repo 然后将git-repo目录下的repo加入到环境变量 vim ~/....
  • android4.0.4 增加HDMI设置

    万次阅读 2014-07-30 18:21:11
    最开始我是先在设置里加上这些设置然后在去实现功能 这里就一起说了 之前android2.3里有HDMI设置所以这里就参照那个增加 首先修改Setting 查看libhdmi库首先查看下hdmi能设置的格式 源码路径 device/samsung/
  • Settings ->About 然后点击Build 6次就可以了。
  • Error parsing D:\Program Files\Android-sdk\system-images\android-24\android-tv\x86\devices.xml
  • Android TV中按键事件和焦点处理总结

    万次阅读 2019-04-24 09:15:21
    1.KeyEvent事件keyEvent:源码位于android.view下,包装管理所有按键有关输入的事件体系,KeyEvent和MotionEvent的分发流程一样,都是InputEvent的子类,都是从Activity开始的,KeyEvent主要有以下事件类型:...
  • Android 音量键的监听

    万次阅读 2016-09-10 12:32:13
    实践后的结论:  下面两种都可以获取到音量键的东西, 测试的时候,发现 KeyEvent.KEYCODE_VOLUME_UP 一直按住的时候, 三星的一款平板计数到200,就不在触发该事件; 所以改为 KeyEvent.ACTION_DOWN 时启动一个方法...
  • 为TextView添加链接-setMovementMethod 一、前言:  本文是由《TextView中的图文共存问题》延伸出来的知识点讲解;原文地址:《TextView中的图文共存问题》 二、为TextView设置链接: ... 当文字中出现URL、E-...
  • Android TV APPs 的介绍与创建

    万次阅读 2016-07-19 18:15:24
    最近开始接触到Andorid TV编程,发现目前这方便的资料与比较还比较少,但现在随着产品与用户的升级,涉及到Android TVAndroid Watch的编程离我们越来越近了,本篇博客开始,将以笔记的方式记录我Android TV从零到...
  • Android开发中导入字体库

    千次阅读 2017-08-15 17:42:19
    Android开发中系统只提供了三种字体样式,那么如何使用自己想要的字体呢,使文字内容展示有更多的风格选择呢?那就只能导入外部字体库,不过这种方式会导致apk体积暴增,有可能会让你得不偿失。听说google发布了新...
  •   也不知道该怎么取名,暂且就叫他多抽屉效果吧~~ 最早QQ就是这样的效果,点一下,还有声音,呵呵。   一晃,都过去那么多年了...     废话不多说了,看下效果:  ...
  • [android]控件TextView的常用属性

    千次阅读 2012-09-09 20:38:55
    TextView tv=new TextView(Conext context); tv.setText("这是一个控件");---设置控件上的文本内容 tv.setBackgroundColor(Color.WHITE);---设置背景颜色 tv.setTextColor(Color.BLACK);---设置控件上文本的颜色 ...
  • 待完成。。。
  • Android TV开发(—)开始电视应用

    万次阅读 2016-08-10 19:53:15
    官网:https://developer.android.com/training/tv/start/start.html 确定支持的媒体格式
1 2 3 4 5 ... 20
收藏数 101,451
精华内容 40,580
关键字:

android-tv