一、项目背景

项目要求将APP适配一款键盘机,屏幕大小240*320,不支持触屏。针对小屏幕适配,首先需要在res资源文件夹下新建文件夹,命名为layout-small,将需要适配的页面复制到该文件夹,并修改尺寸等等。

我在做这个项目时,参考了很多TV android的文章,很类似,都是使用键盘的方式移动焦点。

b1bf667a303af490fb6c5aec66b8a157.png

主要难点:键盘方式主要难点在于焦点移动和键盘事件的处理。

二、分析

需求:通过方向键左右按键控制显示的子界面

原始界面分析:

原始界面为DrawerLayout布局,抽屉部分在键盘机中不显示,主界面部分是一个FrameLayout,截图如下:

6d4844329d7a02cbc53fe7be872ca708.png

项目在键盘机的截图

整个页面分为两个部分,标题栏是一个Radiogroup,其中有四个Radiobutton,

每个RadioButton关联一个Fragment,来替换主界面标题栏以下部分。Xml代码如下:

触摸屏原有的点击方式切换:

d0305331f8f6b1375b1deaf0bf28d79d.png

通过hide和show的方式显示/隐藏fragment

a6bdb48df4f79507d6a69148d27562c8.png

上面是通过对Radiogroup中Radiobutton的状态变化监听来实现界面切换。

我们需要做的:通过键盘将焦点移动到对应的Radiobutton,然后调用performClick,触发点击事件即可。

键盘方式:

1. 新建数组 RadioButton radioButtons[]= new RadioButton[4]

643248c32bd805637e69d44f359a513f.png

将四个radioButtion加入数组中

2.在主界面Fragment(项目中为PhoneHomeFragment)新建onKeyDown的静态方法,该方法处理键盘的左右按键,按下左键则当前拥有焦点的radiobutton左边一个取得焦点,并触发点击,按下右键原理相同。通过数组和取余的方式处理焦点在最左边和最右边的情况

4b4022838d7cbc2395f32e55af1c8f60.png

2. 在PhoneHomeFragment依附的activity中重写onKeyDown方法,并调用Fragment中的onKeyDown方法(忽略此处监听返回键的代码)

cdf6af3f15fb3d500fad419932264cd6.png

以上,则实现了通过左右键切换界面。

题外话:为什么需要这么麻烦呢?

每个页面都有很多需要焦点的控件,当焦点移动到标题栏以下,再想切换就比较又得把焦点移到上方。同时,很多情况下,焦点并不能按照我们希望的样子移动,将控件放入数组再手动改变焦点是一个不错的方式。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐