关于android适配问题
相信大家在面试的时候都可能被问过各种各样的适配问题,楼主在以前面试的时候都会回答关于
图片像素这个方面的,其实不然,关于适配方面的问题其实还有很多,一些你可能知道,只是没有往这个方面联想
咱们先从低版本说起
1. 华为手机软键盘问题
不管是什么版本,华为手机的软件盘都会存在一些bug,比如在scrollview中存在edittext 控件,一般的想要在键盘弹出时同时提高edittext 在屏幕中的高度
只需要在manifest 的 的标签中添加上 就可以实现,
但是部分华为手机中确实是做不到的,
这个问题在网上有一些说明,我就不多做介绍了,提供一个 类的标签,可以很容易的搜索到 [AndroidBug5497Workaround] 这个问题google没有修复,
但是网上的一些大神给出了这个类,修复了该问题
2.ListView setHeaderView 与setAdapter 调用先后问题
我记得好像是从android 17 开始google优化了listview setHeaderView setfooterView 方法 与 setAdapter 先后顺序的bug
如果在17版本以前 如果先调用setAdapter 再 调用setHeaderView 或者 setfooterView ,然后继续改变adapter 里的数据就会报错,
为了支持17版本以前,应该先调用 调用setHeaderView或者 setfooterView 然后再调用setAdapter 可以避免该错误出现
3.android 5.0 优化了时钟精确度问题,
这个是在以前项目中遇到的一个问题,服务器给我一个开始时间,和持续时间,我需要计算用户当前时间是否在持续时间内,这个东西在线上运行了很久都没有问题,
但是突然有一天一个投诉就到了我的头上,经过查找,发现是5.0后优化了时间精确度,我在以前时间上只是设置到了天,5.0之后必须精确的秒,否则会出现边缘的一天
的一些问题,
4.沉浸式状态栏 忘记从什么时候开始出的
这个问题是很多国内的厂商(小米)率先支持了这个功能,由于用了它之后视觉效果比较好,所以现在很多app都效仿这么做,这种解决方法在网上有很多,但是比较靠谱的
的githug上有一些,我现在使用的是 StatusBarCompat 还是比较好用的,如果觉得找资料麻烦的化 可以看一些我写过的东西
http://blog.csdn.net/qq_22256027/article/details/69261588 关于沉浸式状态栏的使用的相关代码
5.android 7.0动态获取权限问题
这个问题想必只要是还在做android开发的人一般都会接触到的一些问题,其实google做的没有那么绝,只是在debug 版本中限制了该权限的动态申请,relace版本没有
弄,估计是怕这个功能一上线,一大批app估计就疯了, 这个解决方法有推荐使用现成的api github上有比较成熟的解决方案 EasyPermissions 可以很好的解决该类问题
6.android 7.0 加强了PopupWindow 使用限制
这个问题当时出现的情况是这样的, pop.showAtLocation(parent, Gravity.NO_GRAVITY, width,height); 这个方法在android 7.0之前是好用的,可以在屏幕底部显示该popupWindow
(ps;能用这种方式实现底部弹出popupWindow的都不是一般人,真心太狠了) 后来在修改为 mPopupWindow.showAtLocation(parent, Gravity.BOTTOM, 0,0);该问题解决
7.android7.0分屏显示
android 7.0添加了同一个屏幕显示两个app的功能,具体应用场景可以自己去脑补,但是为了能兼容这个问题,在app的前期设计中就要注意一些坑,那就是布局不能写死,及时功能很少,
最多也就是大半个屏幕,但也要在外部使用scrollview做嵌套,从而让app在分屏时不至于显示不全的bug , 当然重中之重是在 manifest 的
中添加该注释
让该应用支持分屏操作
8.超大宽高比
正常的手机宽高比差不多是 不会差很多 1080*1920 720*1080 等等,但是三星最近出了一款S8的炒鸡牛鼻的手机,宽高比例达到了 18:9
这个奇葩的比例就存在奇葩的问题, 那就是app在该手机中会存在不能沾满屏幕的问题,上面和下面都会存在黑边,解决这个问题也很好做
在 manifest 中添加
该标签这个问题就可以解决了
9.android8.0 交点问题强化
现在市面上还没有几个android8.0系统的手机,华为的Mate10 可谓是其中比较牛的一款了,这么先进的8.0系统 google做了一些优化,那就是在ListView的item中如果使用
android:focusableInTouchMode="true",会导致listview 的OnItemClickListeners 回调不能执行,在项目中一般会出现的问题是,为了listview 的美化,item中的文字
不能存在换行的情况,为了解决该问题就会用到跑马灯形式的textview 如果在textview的属性中如果这么设置了,就会导致该问题. 其实这个问题还有一个很早就会有的反面教材
那就是在listview 的item布局中存在 checkbox ,如果不将checkbox 的android:focusableInTouchMode="false" 这么写的话,item 的点击事件无法回调,只不过在8.0之前没有在
textview上加强
10.android 8.0 取消了大部分静态注册广播的功能,也就是说想要在app中使用广播的话必须手动去维护 receiver ,虽然写起来比较简单,但是做法让人感到很厌烦,推荐使用eventBus 省时省力,最主要的是好用
这些就是我在平时工作中遇到的一些比较小,但是确实比较坑的适配问题,如果以后再遇到关于适配方面的问题大家可以借鉴一下,欢迎大家留下自己的想法,
谢谢!!!