美文网首页
Android如何适配不同设备

Android如何适配不同设备

作者: CodeMyLove | 来源:发表于2017-05-19 11:10 被阅读135次

    支持不同的设备

    支持不同的语言

    其实就是在res中创建不同的语言文件夹,例如:

        res/
           values/
               strings.xml
           values-es/
               strings.xml
           values-fr/
               strings.xml
    

    然后创建对应的语言文件即可

    支持不同分辨率的设备

    创建不同的布局文件

    android 对于屏幕分类使用两种特性:size和density;我们的APP应该对不同大小和分辨率的设备都做适配;
    主要有四种大小:small, normal, large, xlarge
    四种分辨率:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)
    跟语言一样,也是在不同的文件夹中放置这些布局文件就可以了。另外,因为会有横屏和竖屏两种模式,所以说为了最佳的用户体验,我们的许多APP都应该修改布局来适配不同的模式。

    MyProject/
        res/
            layout/              # default (portrait)
                main.xml
            layout-land/         # landscape
                main.xml
            layout-large/        # large (portrait)
                main.xml
            layout-large-land/   # large landscape
                main.xml
    

    名字必须是相同的,这样子在代码初始化的时候就会根据屏幕的大小自动选择相应的布局文件了,而且会自动根据屏幕的方向来决定使用landscape(横屏模式)还是portrait(竖屏模式)

    android 3.2以上支持一个可以定义屏幕大小的高级方法,它能让你根据密度无关像素的最小宽度和高度来指定不同的资源

    创建不同的Bitmaps

    提供不同分辨率的bitmap资源来适应不同的密度(?):

    • xhdpi: 2.0
    • hdpi: 1.5
    • mdpi: 1.0 (baseline)
    • ldpi: 0.75
      意思就是说,如果你对xhdpi尺寸的设备生成了一张200200的图片,那就应该生成同样的资源——150150(hdpi)、100x100(mdpi)、 75x75(ldpi)。
      文件的分布如下
    MyProject/
        res/
            drawable-xhdpi/
                awesomeimage.png
            drawable-hdpi/
                awesomeimage.png
            drawable-mdpi/
                awesomeimage.png
            drawable-ldpi/
                awesomeimage.png
    

    任何时候,你引用 @drawable/awesomeimage ,系统都会基于屏幕的分辨率选择适当的bitmap。

    ldpi分辨率的资源不一定要用上,因为系统会自动的对hdpi的资源按比例缩小一半以适配ldpi的屏幕

    支持不同的平台版本

    指定最小和目标API Levels

    <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
        <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
        ...
    </manifest>
    

    一般在AndroidManifest.xml中使用 <uses-sdk> 这个元素标签来定义应用兼容的最低的APIlevel(minSdkVersion)和最高的API Level(targetSdkVersion)

    实时检查系统版本

    private void setUpActionBar() {
        // Make sure we're running on Honeycomb or higher to use ActionBar APIs
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            ActionBar actionBar = getActionBar();
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }
    

    如代码所展示的那样,你可以通过Build这个类来判断APP现在运行的版本

    相关文章

      网友评论

          本文标题:Android如何适配不同设备

          本文链接:https://www.haomeiwen.com/subject/accyxxtx.html