Android碎片化以及兼容性问题的研究

一、碎片化问题:

众所周知,随着Android的发展,最让一般程序员头疼的就是碎片化的问题,碎片化包括,语言碎片化,平台版本碎片化,设备尺寸碎片化,以及设备功能碎片化(某些传感器等)的问题。

1.语言碎片化:

1)创建语言目录,以及对应的字符串文件,如:res/values/strings.xml、res/values-es/strings.xml、res/values-zh-rCN/strings.xml等等。

2)使用资源字符串,Android系统可以根据系统语言自动识别加载对应文件夹里的字符串资源。

2.设备功能碎片化:

1)Android针对软硬件功能提供了不同id,可以用以检测设备是否存在该功能,如果不存在可以在Manifest中设置不允许安装。如,罗盘传感器的功能ID为FEATURE_SENSOR_COMPASS等。

Manifest:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

当required为true时,如果该设备不包含该设备或功能,app就不会被安装。
2)当功能不是必须的时候,即required为false时,可以选择在运行时通过hasSystemFeatrue()检测是否含有该功能。

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device does not have a compass, turn off the compass feature
    disableCompassFeature();
}

3.平台版本碎片化:

1)指定最小支持版本与目标版本。

<manifest ... >
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
    ...
</manifest>

minSdkVersion用以表示兼容的最小版本。targetSdkVersion用以表示已经优化的最高版本,例如4.4以上的版本对于AlarmManager的优化,使得set()与setRepeating()变得不再准确,如果使用19之前的targetSdkVersion这将会引起一些问题。

2)代码中检查:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // 低于某些版本时可以选择老版本的方法,或者不使用该方法
    disableDragAndDrop();
}

根据当前设备版本来决定功能的实现方式,甚至是放弃该功能。
3)使用平台样式以及主题:

<activity android:theme="@android:style/Theme.Dialog">
使用底层操作系统的style和theme。通过使用这些内置的样式和主题,应用将适应每个新版本的Android的外观和感觉。

4.设备尺寸碎片化:

1)针对不同的屏幕大小,创建不同的layout。

如:res/layout/main.xml、res/layout-large/main.xml等等。

2)针对不同的屏幕密度,提供不同的图片。

xhdpi:2.0, hdpi:1.5, mdpi:1.0, ldpi:0.75,即,为xhdpi提供一张200*200的图片,那么对应的,hdpi:150*150,mdpi:100*100,ldpi:75*75.

但是通常我们只提供xhdpi就足够了,现在还有xxhdpi:3.0以及xxxhdpi。

5.其他的适配建议:

1)字体用sp;

2)尺寸用dp;

3)多用match_parent与wrap_content以及layout_weight,不用指定的尺寸;

4)不用绝对布局。

5)使用.9.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值