Android 如何适配不同机型

在开发 Android 应用程序时,一个常见的问题是如何适配不同的机型。由于不同的 Android 设备有不同的屏幕尺寸、像素密度、处理器等硬件差异,应用程序在不同设备上可能会出现布局错乱、字体过小或过大、图像失真等问题。为了解决这些问题,我们需要采取一系列的策略来适配不同的机型。

1. 使用限定符适配不同的屏幕尺寸和像素密度

Android 提供了一套限定符(qualifier)来帮助我们根据屏幕尺寸和像素密度提供不同的资源文件。使用限定符可以让应用在不同的设备上自动选择合适的资源,从而保证布局和图像的质量。

a) 使用不同的布局文件

Android 提供了多种资源文件夹命名约定,可以根据屏幕尺寸和像素密度提供不同的布局文件。例如,我们可以创建 layout-sw600dp 文件夹来适配最小宽度为 600dp 的设备,创建 layout-hdpi 文件夹来适配高像素密度的设备。

├── res
    ├── layout
    ├── layout-sw600dp
    │   └── activity_main.xml
    ├── layout-hdpi
    │   └── activity_main.xml
    └── layout-xhdpi
        └── activity_main.xml

b) 使用不同的图片资源

与布局文件类似,我们也可以根据屏幕尺寸和像素密度提供不同的图片资源。使用 drawable 文件夹的不同命名约定,可以让 Android 在不同设备上选择合适的图片资源。例如,我们可以创建 drawable-hdpi 文件夹来适配高像素密度的设备。

├── res
    ├── drawable
    ├── drawable-hdpi
    │   └── icon.png
    ├── drawable-xhdpi
    │   └── icon.png
    └── drawable-xxhdpi
        └── icon.png

2. 使用百分比布局适配不同屏幕尺寸

在使用 XML 布局文件时,我们可以使用百分比布局来适配不同屏幕尺寸。百分比布局可以根据屏幕尺寸自动调整视图的大小和位置。

a) 使用百分比布局库

我们可以使用 [PercentRelativeLayout]( 或 [ConstraintLayout]( 来实现百分比布局。这些布局库可以让我们指定视图在父容器中的百分比位置和大小。

<android.support.percent.PercentRelativeLayout xmlns:android="
    xmlns:app="
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        app:layout_widthPercent="50%"
        app:layout_heightPercent="50%"
        app:layout_marginTopPercent="25%"
        app:layout_marginLeftPercent="25%"
        android:text="Button" />

</android.support.percent.PercentRelativeLayout>

b) 使用百分比布局属性

如果不想使用第三方库,我们也可以使用 Android 原生的百分比布局属性。在 Android 8.0(API 级别 26)及更高版本中,Android 引入了 [ConstraintLayout]( app:layout_constraintWidth_percentapp:layout_constraintHeight_percent 属性来指定视图的百分比宽度和高度。

<android.support.constraint.ConstraintLayout xmlns:android="
    xmlns:app="
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        app:layout_constraintWidth_percent="