Android TV开发Demo初探
前言
因为现在的工作需要进行Android TV的开发,之前没有过相关的经验,就对Google的demo做一些研究,主要是视频导航的主页面。
项目结构
这个demo并不复杂,java文件都在一个文件夹下了。
主要的代码是在MainActivity中嵌套了一个MainFragment,主页面的逻辑都在mainfragment中完成,Movie和MovieList提供数据,CardPresenter处理每个视频卡片的逻辑。
项目相关知识
BrowseFragment
导航页面是在BrowseFragment上完成的,BrowseFragment包括一个HeaderFragment和一个RowsFragment。
页面如下:
左边蓝色区域是HeaderFragment,右边是RowsFragment。
BrowseFragment和BrowseSupportFragment
不过BrowseFragment已经弃用,目前推荐使用的是BrowseSupportFragment。两者在实现的功能和用法上并没有不同,主要的区别是BrowseFragment继承自android.support.v4.app.Fragment,而在API 28以后,Fragment已经被移到了androidx.fragment.app下,BrowseSupportFragment正是继承自androidx.fragment.app.Fragment。
需要注意的是,在使用BrowseSupportFragment后,MainActivity要继承FragmentActivity,否则xml中的fragment就会和BrowseSupportFragment继承的Fragment不匹配导致运行时Crash。(动态加入的fragment可能不会有这个问题)
leanback
leanback是google为TV开发提出的方案,在TV开发是要引入leanback的库
implementation 'androidx.leanback:leanback:1.0.0'
另外,在manifest文件中也要设置leanback的配置
<uses-feature
android:name="android.software.leanback"
android:required="true" />
提一嘴,manifest中也要配置touchscreen,关掉屏幕触摸
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false"/>
导航页面开发
导航页面主要是在MainFragment中进行开发
设置页面元素
//设置title
setTitle("Hello Android TV");
//左侧Header
setHeadersState(HEADERS_ENABLED);
setHeadersTransitionOnBackEnabled(true);
//header颜色
setBrandColor(getResources().getColor(R.color.fastlane_background