<div id="language"/>
語(yǔ)言適配
在包含文字的UI中册踩,最好將文字與代碼分離開。Android為我們提供了一個(gè)res目錄:
為了支持不同的語(yǔ)言適配朽基,
- 我們需要在res目錄下根據(jù)不同地區(qū)建立不同的values-xxx文件,其中xxx代表國(guó)家簡(jiǎn)寫
- 在values-xxx下新建一個(gè)strings.xml文件
- 編寫各個(gè)values下的strings.xml
4.在布局中使用@string/title引用strings.xml中的值,系統(tǒng)會(huì)根據(jù)機(jī)器的本地語(yǔ)言選擇合適的引用來(lái)源
//在xml中
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title"/>
//在代碼中:
TextView textView=(TextView) findViewById(R.id.textView);
textView.setText(R.string.title);
<span id="screen"/>
屏幕適配
Android 通過(guò)尺寸大小和密度來(lái)定義不同的屏幕巍佑。
- 大小:small寄悯、normal萤衰、large、xlarge
- 密度: low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)
和適配語(yǔ)言一樣猜旬,通過(guò)創(chuàng)建不同的文件,來(lái)適配不同的屏幕脆栋,比如laytouts以及bitmap倦卖。
還有一個(gè)需要適配的地方就是屏幕的方向(橫豎屏)
創(chuàng)建不同的layouts目錄
為了適配不同大小或屏幕方向的屏幕,通過(guò)創(chuàng)建layouts-<尺寸或方向>類似的目錄進(jìn)行適配椿争。Android 系統(tǒng)會(huì)在app運(yùn)行的時(shí)候怕膛,根據(jù)屏幕的大小以及方向來(lái)選擇合適的布局文件。
MyProject/
res/
layout/ # 默認(rèn)(豎屏)
main.xml
layout-land/ # 橫屏
main.xml
layout-large/ # 大尺寸(豎屏)
main.xml
layout-large-land/ # 大尺寸 橫屏
main.xml
創(chuàng)建不同分辨率的bitmap
不同的機(jī)器丘薛,屏幕分辨率是不同的嘉竟。如果為一個(gè)高分辨率的機(jī)器提供一張低分辨率的圖片來(lái)顯示,那么圖片看起來(lái)就會(huì)很模糊洋侨,用戶體驗(yàn)不好舍扰。如果在一個(gè)低分辨率的機(jī)器上顯示一張高分辨率的圖片,顯示的還是低分辨率圖片希坚,而且會(huì)導(dǎo)致不必要的內(nèi)存開銷边苹。
因此為不同分辨率的屏幕提供合適分辨率的圖片是很有必要的。
不同分辨率對(duì)應(yīng)的縮放比如下:
xhdpi: 2.0
hdpi: 1.5
mdpi: 1.0 (baseline)
ldpi: 0.75
縮放比是啥意思呢裁僧?假如有一張 100*100 像素的mdpi圖片个束,那么對(duì)應(yīng)的其他分辨率為:
xhdpi: 2.0 -> 200*200 px
hdpi: 1.5 -> 150*150 px
mdpi: 1.0 -> 100*100 px
ldpi: 0.75 -> 75*75 px
在使用Andriod Studio創(chuàng)建項(xiàng)目的時(shí)候,為我們提供了不同分辨率的目錄聊疲,我們只需將不同的分辨率的圖片放入對(duì)應(yīng)的目錄下即可
<div id="sdk"/>
版本適配
由于Android SDK有許多不同的版本茬底,因此不同的版本之間可能存在差異。比如新版本添加了一個(gè)新功能获洲,如果將該App安裝到低版本的機(jī)器上阱表,那么機(jī)器肯定會(huì)不支持,從而導(dǎo)致崩潰贡珊。
查看當(dāng)前開發(fā)的sdk版本配置最爬,在Android Studio 創(chuàng)建項(xiàng)目時(shí),會(huì)在項(xiàng)目根目錄下门岔,生成build.gradle文件:
andriod{
...
compileSdkVersion 23 //當(dāng)前編譯使用的SDK版本
defaultConfig{
...
minSdkVersion 15 //允許運(yùn)行的最低SDK版本
targetSdkVersion 23 //當(dāng)前SDK版本
versionCode 1
versionName "1.0"
}
...
}
為了解決不同 版本之間可能存在的差異爱致,我們可以在運(yùn)行時(shí)通過(guò) Build.VERSION.SDK_INT 獲取本機(jī)的sdk版本來(lái)做相應(yī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);
}
}