关于Android 有虚拟框的屏幕适配
Android也做了一段时间了,做的项目也经历过大大小小的测试,这里把一些适配的实际情形写下来,方便日后查阅,后面会持续更新。
主要记录一些适配的实际情形,至于使用.9图、dp单位这类适配就不说了。
适配虚拟按键
部分手机会有虚拟按键,会占用屏幕的一定空间,当我们的界面布局存在“硬编码”的时候(固定写死多少dp),就可能导致界面显示出问题。
可以通过如下方法来判断是否有虚拟按键:
1
|
/**
|
然后通过如下方法获取虚拟按键的高度:
1
|
/**
|
获得到高度之后,便能代码控制之前的“硬编码”了,依情况减去或者加上虚拟按键的高度便可以解决这类问题的适配的。示例如下:
1
|
// 如果有虚拟按键,则加上虚拟按键的高度
|
当然你也可以简单粗暴的隐藏掉虚拟按键。代码如下:
1
|
View decorView = getWindow().getDecorView();
|
Android4.4横屏弹出的对话框顶部被状态栏遮盖
效果就像这样:
初步感觉是Android4.4的一个BUG,可以在Dialog创建的时候,添加如下代码来解决问题:
1
|
/**
|
联想K3 Note中GridView自带分隔线
效果就像这样:
在GridViewz中添加horizontalSpacing
、verticalSpacing
2条属性来解决问题:
1
|
|
VideoView切换横竖屏
VideoView在切换横竖屏,如果是Activity跳转,那么就会重新加载,导致切换前后不连贯。
所以我的做法是:只有一个Activity,点击全屏按钮将其置为横屏状态,每次切换的时候,显示一套布局,隐藏一套布局。配置activity的android:configChanges="orientation|screenSize"
,这样在切换的时候就不会重新布局,然后在onConfigurationChanged
中进行相关操作:
1
|
|
但是在部分机型会导致切换后视屏尺寸没有自适应,如图:
利用如上代码videoView.getHolder().setFixedSize(videoView.getWidth(), videoView.getHeight());
即可解决问题。