Android如何適配不同設備

支持不同的設備

支持不同的語言

其實就是在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現在運行的版本

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容