Android屏幕与代码适配方案经验总结。
2017-01-06 17:52
417 查看
前言:众所周知Android的手机碎片化非常严重,每个品牌的手机UI和系统都被手机厂商定制化。定制化的最大的区别在于那个几点:
手机屏幕分辨率
手机尺寸
手机UI
手机系统版本
厂商对不同系统版本的定制化
有经验的Android开发人员都知道,在XX品牌手机上跑没有任何问题,但却在ZZ品牌手机上跑部分功能有差异,让人头痛,直呼骂娘。问题主要集中为:
1. 在使用某个功能上莫名其妙的崩溃。
2. UI界面上的适配问题,可能有些许差异。
3. 部分功能代码在不同的手机上运行,所造成的差异。
那该如何的解决这些问题呢?我在这里做一个总结。如果列的不全欢迎大家在留言面板上提出来,也让我学习学习。谢谢大家!
2 . 在字体大小textSize使用sp作为单位。也会自适应大小。
3 . 在布局文件界面上一些图片能使用9patch图就用9patch。
9patch是会自适应的图片,他的出现为了防止拉伸变形和减少图片体积。在内存上消耗更小。
4 . 在res资源文件夹下定义不同的values文件夹(values-xhdpi ,values-xxhdpi)下面定义相同的dimens XML文件,name相同但value不相同。
values-xhdpi
values-xxhdpi
5 . 假如某布局需要填充剩余的父窗体,就得使用match_parent。
6 . 加入有几个控件需要每个按钮的大小一致并且填充父窗体适应不同手机一定要使用权重:layout_weight
7 . 图片适配,一般对手机UI有经验的美工都会给你切多个不同分辨率的图片供你放置在drawable下。
2 . 我们在开发中会遇到在高版本的SDK上谷歌删除了某些API。使得我们在低版本的手机上跑就会崩溃报:
例子:
3 . 不同品牌的手机造成的功能上差异或者异常崩溃。这个问题是最头痛的,也许是系统造成的、也许是厂商定制造成的,问题很诡异。代码是没有问题的。但是偏偏在某款手机上就是出问题,这时候不要方,静下心来。
有谷歌兼容方案就用谷歌提供的什么 v4 v7 desing包
找找第三方相同功能的源码,不要用谷歌提供的,一般都能找到解决方案,实在不行就自己写吧。
要学会排查问题,首先你必须非常熟悉官方API,如果没有错误日志的问题就尝试用注释掉你觉得可能出问题的代码试试,一一排查总能找到问题。
手机屏幕分辨率
手机尺寸
手机UI
手机系统版本
厂商对不同系统版本的定制化
有经验的Android开发人员都知道,在XX品牌手机上跑没有任何问题,但却在ZZ品牌手机上跑部分功能有差异,让人头痛,直呼骂娘。问题主要集中为:
1. 在使用某个功能上莫名其妙的崩溃。
2. UI界面上的适配问题,可能有些许差异。
3. 部分功能代码在不同的手机上运行,所造成的差异。
那该如何的解决这些问题呢?我在这里做一个总结。如果列的不全欢迎大家在留言面板上提出来,也让我学习学习。谢谢大家!
布局适配:
1 . 布局文件layout_width和layout_height上使用dip或者dp作为尺寸单位,不要使用px作为尺寸单位。密度会自动根据手机的分辨率和尺寸进行计算,适应不同分辨率和尺寸的手机上达到尺寸相同。px是固定的,不会自适应大小。2 . 在字体大小textSize使用sp作为单位。也会自适应大小。
3 . 在布局文件界面上一些图片能使用9patch图就用9patch。
9patch是会自适应的图片,他的出现为了防止拉伸变形和减少图片体积。在内存上消耗更小。
4 . 在res资源文件夹下定义不同的values文件夹(values-xhdpi ,values-xxhdpi)下面定义相同的dimens XML文件,name相同但value不相同。
values-xhdpi
resources> <dimen name="text_size_s">17sp</dimen> </resources>
values-xxhdpi
resources> <dimen name="text_size_s">19sp</dimen> </resources>
5 . 假如某布局需要填充剩余的父窗体,就得使用match_parent。
6 . 加入有几个控件需要每个按钮的大小一致并且填充父窗体适应不同手机一定要使用权重:layout_weight
7 . 图片适配,一般对手机UI有经验的美工都会给你切多个不同分辨率的图片供你放置在drawable下。
代码适配:
1 . 使用谷歌提高的v4 、v7 、desing包适应低版本系统的手机,例如Fragment在3.0后才推出的API,在2.3系统上肯定没有,使用兼容包解决。2 . 我们在开发中会遇到在高版本的SDK上谷歌删除了某些API。使得我们在低版本的手机上跑就会崩溃报:
MethodNotFoundException,这时候可以判断SDK版本进行代码适配。
例子:
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.ICE_CREAM_SANDWICH){ // 调用对应的SDK的API }else{ }
3 . 不同品牌的手机造成的功能上差异或者异常崩溃。这个问题是最头痛的,也许是系统造成的、也许是厂商定制造成的,问题很诡异。代码是没有问题的。但是偏偏在某款手机上就是出问题,这时候不要方,静下心来。
有谷歌兼容方案就用谷歌提供的什么 v4 v7 desing包
找找第三方相同功能的源码,不要用谷歌提供的,一般都能找到解决方案,实在不行就自己写吧。
要学会排查问题,首先你必须非常熟悉官方API,如果没有错误日志的问题就尝试用注释掉你觉得可能出问题的代码试试,一一排查总能找到问题。
相关文章推荐
- 经验总结-Android手机屏幕适配问题
- Android屏幕适配(个人的一点点总结及经验)
- Android_关于屏幕适配经验总结
- Android开发——Android手机屏幕适配方案总结
- Android开发——Android手机屏幕适配方案总结
- Android开发——Android手机屏幕适配方案总结
- android多分辨率多屏幕密度下UI适配方案
- android下在屏幕适配小总结
- Android-关于屏幕适配的一些经验
- 使用Cocos2d-x 3.2和Cocos Studio做屏幕适配方案总结
- Android屏幕适配总结
- android下在屏幕适配小总结
- Android屏幕适配总结
- Android-屏幕适配需要注意的地方总结
- Android-关于屏幕适配的一些经验
- Android屏幕适配方案
- Android笔记:多分辨率适配及碎片化问题解决方案总结 推荐
- 在Android上使用Phonegap的个人经验总结及项目中的优化方案
- 播放器适配经验总结――Android
- android屏幕适配全面总结