大连网站建设求职简历,选择网站建设,wordpress英文版切换中文,十堰市网站建设导入依赖
Google官方为Android TV的UI开发提供了一系列的规范组件#xff0c;在leanback的依赖库中#xff0c;这里介绍一些常用的组件#xff0c;使用前需要导入leanback库。 implementation androidx.leanback:leanback:$version常用的页面
这些Fragment有设计好的样式在leanback的依赖库中这里介绍一些常用的组件使用前需要导入leanback库。 implementation androidx.leanback:leanback:$version常用的页面
这些Fragment有设计好的样式只需要根据场景选择对应的Fragment并往里面填充内容即可。
1. BrowseSupportFragment
可以理解为一个水平的tab页面。左边是tab右边是tab对应的数据。
2. VerticalGridSupportFragment
内部是ViewticalGridView的页面。
3. GuidedStepSupportFragment
左边是描述右边是选项的设置页面。
4. ErrorSupportFragment
信息加按钮的页面。
5. LeanbackSettingsFragment
右侧弹出的设置页面里面加载一个PreferenceFragment.
常用组件
1. HorizontalGridViewVerticalGridView
HorizontalGridView和VerticalGridView都继承自RecyclerView针对TV的特性在item排版、焦点流转、上/失焦动画、记住焦点、焦点item对齐位置等方面做了比较好的封装。 以HorizontalGridView为例开发时设计的组件包括
HorizontalGridViewRecyclerView的子类ArrayObjectAdapter承担MVP中model的职责负责提供数据访问接口Presenter职责类似RecyclerView的adapter辅助item视图的创建和数据绑定等PresenterSelector根据不同的数据类型选择不同的Presenter用于多item type列表模型ItemBridgeAdapterHorizontalGridView和ObjectAdapter的桥梁用于解耦双方FocusHighlightHelper上焦动画帮助类内置了两种上焦动画
private void initViews() {mHgv (HorizontalGridView) findViewById(R.id.hgv);//3行mHgv.setNumRows(3);//item纵向和横向的距离mHgv.setItemSpacing(20);//item的对齐方式mHgv.setGravity(Gravity.CENTER_VERTICAL);//设置mHgv.setOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() {Overridepublic void onChildViewHolderSelected(RecyclerView parent, RecyclerView.ViewHolder child, int position, int subposition) {super.onChildViewHolderSelected(parent, child, position, subposition);Log.d(TAG, onChildViewHolderSelected() returned: position);//大部分情况下可以通过该方法获取到position}Overridepublic void onChildViewHolderSelectedAndPositioned(RecyclerView parent, RecyclerView.ViewHolder child, int position, int subposition) {super.onChildViewHolderSelectedAndPositioned(parent, child, position, subposition);Log.d(TAG, onChildViewHolderSelectedAndPositioned() returned: position);//当通过setSelectedPosition()方法大幅移动列表时该方法会回调返回的是最终的真实的position当set的值超出范围时...)}});如果想控制VerticalGridView或者HorizontalGridStyle的焦点是否可以移出去可以在它的style中设置下面四个属性 style nameMyVerticalGridStyleitem namefocusOutFronttrue/itemitem namefocusOutEndfalse/itemitem namefocusOutSideStartfalse/itemitem namefocusOutSideEndtrue/item/style分别对应四个方向设置为false表示焦点不能从该方向移到外面即使在该方向上有能获取焦点的View。如果都为false那焦点只能在VerticalGridView里面切换了无法移出到外面。
2. 飞框
智能电视UI需要高亮用户所选中的项来达到导航的效果。 焦点项飞框的动画效果就是飞框会自动移动到下一个选中项并且会根据下一个选中项的大小进行伸缩变化来包裹高亮下一个选中项。 原理是使用属性动画获取下一个选中项和当前选中项的位置和宽高等信息然后使用属性动画和这些信息来动态实现移动飞框View的移动和宽高等动画效果。 Android TV 焦点移动飞框的实现
一些细节
TV开发中焦点的移动默认是根据系统分配的但是也可以拦截遥控器的事件手动分配焦点。
SuppressLint(RestrictedApi)
Override
public boolean dispatchKeyEvent(KeyEvent event) {if (event.getAction() KeyEvent.ACTION_DOWN) {//当按键按下的时候。int keyCode event.getKeyCode();switch (keyCode) {case KeyEvent.KEYCODE_DPAD_DOWN:///break;}}return super.dispatchKeyEvent(event);
}View获取焦点的方法是requestFocus()Android instrumentation是Android系统里面的一套控制方法或者”钩子“。通过Instrumentation可以用来模拟用户的操作如按键或者点击事件因此Instrumentation经常被用到测试中