Android如何適配不同設(shè)備

支持不同的設(shè)備

支持不同的語言

其實(shí)就是在res中創(chuàng)建不同的語言文件夾,例如:

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

然后創(chuàng)建對(duì)應(yīng)的語言文件即可

支持不同分辨率的設(shè)備

創(chuàng)建不同的布局文件

android 對(duì)于屏幕分類使用兩種特性:size和density;我們的APP應(yīng)該對(duì)不同大小和分辨率的設(shè)備都做適配;
主要有四種大?。簊mall, normal, large, xlarge
四種分辨率:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)
跟語言一樣,也是在不同的文件夾中放置這些布局文件就可以了。另外,因?yàn)闀?huì)有橫屏和豎屏兩種模式,所以說為了最佳的用戶體驗(yàn),我們的許多APP都應(yīng)該修改布局來適配不同的模式。

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

名字必須是相同的,這樣子在代碼初始化的時(shí)候就會(huì)根據(jù)屏幕的大小自動(dòng)選擇相應(yīng)的布局文件了,而且會(huì)自動(dòng)根據(jù)屏幕的方向來決定使用landscape(橫屏模式)還是portrait(豎屏模式)

android 3.2以上支持一個(gè)可以定義屏幕大小的高級(jí)方法,它能讓你根據(jù)密度無關(guān)像素的最小寬度和高度來指定不同的資源

創(chuàng)建不同的Bitmaps

提供不同分辨率的bitmap資源來適應(yīng)不同的密度(?):

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (baseline)
  • ldpi: 0.75
    意思就是說,如果你對(duì)xhdpi尺寸的設(shè)備生成了一張200200的圖片,那就應(yīng)該生成同樣的資源——150150(hdpi)、100x100(mdpi)、 75x75(ldpi)。
    文件的分布如下
MyProject/
    res/
        drawable-xhdpi/
            awesomeimage.png
        drawable-hdpi/
            awesomeimage.png
        drawable-mdpi/
            awesomeimage.png
        drawable-ldpi/
            awesomeimage.png

任何時(shí)候,你引用 @drawable/awesomeimage ,系統(tǒng)都會(huì)基于屏幕的分辨率選擇適當(dāng)?shù)腷itmap。

ldpi分辨率的資源不一定要用上,因?yàn)橄到y(tǒng)會(huì)自動(dòng)的對(duì)hdpi的資源按比例縮小一半以適配ldpi的屏幕

支持不同的平臺(tái)版本

指定最小和目標(biāo)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> 這個(gè)元素標(biāo)簽來定義應(yīng)用兼容的最低的APIlevel(minSdkVersion)和最高的API Level(targetSdkVersion)

實(shí)時(shí)檢查系統(tǒng)版本

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這個(gè)類來判斷APP現(xiàn)在運(yùn)行的版本

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容