Android Training(一):App 多語言與 UI 適配

前言

近來想鞏固一下基礎(chǔ)知識,對 Android Training 是久聞大名,粗略看了下作為學(xué)習(xí)和總結(jié)的目錄還是不錯(cuò)滴。由于近來天朝高墻高高聳立,梯子已紛紛倒掉,故而把這些知識搬過來并結(jié)合本人不多的經(jīng)驗(yàn)來作一些簡單總結(jié)(想要梯子的下方評論留郵箱)。

Android Training 官方地址

一. Getting Started

1.1 Building Your First App

包含四個(gè)教程:創(chuàng)建項(xiàng)目、Run App、創(chuàng)建基礎(chǔ)視圖、創(chuàng)建并調(diào)整新的 Activity。比較簡單,不再贅述。

1.2 Supporting Different Devices

1.2.1 Supporting Different Languages and Cultures

支持不同語言,主要方法為在項(xiàng)目的 res 文件夾下創(chuàng)建不同的 values 目錄存放不同的 strings.xml 文件,App 會(huì)根據(jù)系統(tǒng)當(dāng)前語言讀取相應(yīng)資源下的字符串信息。

文件目錄:
MyProject/
    res/
       values/
           strings.xml
       values-es/
           strings.xml
       values-fr/
           strings.xml

栗子:
英語(默認(rèn)語言區(qū)域),/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">My Application</string>
    <string name="hello_world">Hello World!</string>
</resources>

西班牙語,/values-es/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mi Aplicación</string>
    <string name="hello_world">Hola Mundo!</string>
</resources>

法語,/values-fr/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mon Application</string>
    <string name="hello_world">Bonjour le monde !</string>
</resources>

不過我們一般把中文作為默認(rèn)語言區(qū)域
/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">標(biāo)題</string>
    <string name="hello_world">你好!</string>
</resources>

常用語言對應(yīng)文件夾名稱如下,這里就不貼那么多了,常用的記錄一下:
中文(中國):values-zh-rCN
中文(臺灣):values-zh-rTW
中文(香港):values-zh-rHK
英語(美國):values-en-rUS
英語(英國):values-en-rGB

1.2.2 Supporting Different Screens

Android 中需要把不同分辨率的圖片放到不同的資源文件夾已適配不同的屏幕尺寸,有兩個(gè)基礎(chǔ)屬性對大小和密度進(jìn)行分類:

  • 四個(gè)廣義尺寸:small, normal, large, xlarge
  • 四個(gè)廣義分辨率:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)

需要注意的是,屏幕方向的變化被認(rèn)為是屏幕尺寸的變化,需要修改布局以優(yōu)化用戶體驗(yàn)。

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

Android 當(dāng)前教程只是簡單提供了使用限定符的方式根據(jù)屏幕來匹配相應(yīng)布局文件。

尺寸限定符

MyProject / 
    res / 
        layout / 
            main.xml 
        layout-large / 
            main.xml

這里就使用 large 限定符來適配尺寸>7寸平板的布局,但是這種方式只適合Android 3.2版本之前。

屏幕方向限定符

MyProject / 
    res / 
        layout / 
            main.xml 
        layout-land / 
            main.xml

創(chuàng)建不同的圖片資源

生成不同分辨率的圖片放到指定文件目錄:

  • xhdpi:2.0
  • hdpi:1.5
  • mdpi:1.0(基線)
  • ldpi:0.75

然后,將文件放在適當(dāng)?shù)目衫L制資源目錄中:

MyProject / 
    res / 
        drawable-xhdpi / 
            awesomeimage.png 
        drawable-hdpi / 
            awesomeimage.png 
        drawable-mdpi / 
            awesomeimage.png 
        drawable-ldpi / 
            awesomeimage.png

官方這里的教程只是基礎(chǔ),實(shí)際工作中需要更多知識。了解更多屏幕適配的內(nèi)容,查閱下方文章。

最易懂的Android屏幕適配解決方案--總結(jié)版

1.2.3 Supporting Different Platform Versions

這一塊主要講的是版本適配的相關(guān)知識,Google 根據(jù)訪問 Google Play 商店的手機(jī)版本作了記錄。

Platform Versions

指定App適配版本

AndroidManifest.xml 里面包含一些指定版本信息:

  • android:minSdkVersion:表示支持的最小版本
  • android:targetSdkVersion:目標(biāo)版本,表示支持的最大版本
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

但是在 Android Studio 下我們通常把版本信息寫到 app 的 build.gradle 文件內(nèi):

android {
    compileSdkVersion 26 // 項(xiàng)目的編譯 Sdk 版本
    buildToolsVersion "26.0.0"  //  android構(gòu)建工具的版本
    defaultConfig {
        applicationId "com.sky.viewtest"  // 包名
        minSdkVersion 15  // 最小支持版本
        targetSdkVersion 26  // 最大版本
        versionCode 1  // 版本號
        versionName "1.0"  // 版本名
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"  // 單元測試相關(guān)
    }
    ...
}

運(yùn)行時(shí)獲取當(dāng)前運(yùn)行版本

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);
    }
}

上面的例子是指在 App 運(yùn)行時(shí)動(dòng)態(tài)獲取當(dāng)前版本號,當(dāng)版本大于 Build.VERSION_CODES.HONEYCOMB 時(shí)再對 ActionBar 進(jìn)行相關(guān)設(shè)置,因?yàn)榈陀谶@個(gè)版本是不支持 ActionBar 的。

設(shè)置不同的樣式和主題

Activity 以話框式呈現(xiàn):

<activity android:theme="@android:style/Theme.Dialog">

Activity 背景透明:

<activity android:theme="@android:style/Theme.Translucent">

Activity 應(yīng)用自定義主題 style:

<activity android:theme="@style/CustomTheme">

全局應(yīng)用自定義主題,在 <application> 標(biāo)簽下添加 :

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

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

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