Android國際化和螢幕適配
一、國際化
1、語言的國際化
values/strings.xml 預設
values-zh-rCN/strings.xml 中文(簡體)
values-zh-rTW/strings.xml 中文(繁體)
values是預設的,如果存在你未定義的語言,會使用這個資料夾下的配置檔案。
values-zh-rCN 和 values-en-rUS。 並在這兩個目錄中各建立一個strings.xml。要實現不同語言和地區的國際化,這些配置選項包括語言代號和地區代號。 表示中文和中國的配置選項是 zh-rCN; 表示英文和美國的配置選項是en-rUS. 表示zh 和 en 表示中文和英文;CN 和 US 表示中國和美國; 前面的r 是必須的。
2、圖片的國際化
drawable-zh-hdip
drawable-zh-ldip
drawable-zh-mdip
其他的資源目錄也可以採用同樣的方式處理語言和地區的國際化,例如在res 目錄中建立兩個目錄: drawable-zh-rCN 和 drawable-en-rUS,並在這兩個目錄中分別放一個flag.jpg, 然後可以正常引用這個影象資源。
二、螢幕適配
首先:你需要在AndroidManifest.xml檔案的<manifest>元素如下新增子元素
<supports-screens android:largeScreens="true"
android:normalScreens="true" android:anyDensity="true"
android:smallScreens="true">
</supports-screens>
android:anyDensity="true" ,這一句對整個的螢幕都起著十分重要的作用,值為true,我們的應用程式當安裝在不同密度的手機上時,程式會分別載入hdpi,mdpi,ldpi資料夾中的資源。
相反,如果值設定為false,即使我們在hdpi,mdpi,ldpi資料夾下擁有同一種資源,那麼應用也不會自動地去相應資料夾下尋找資源,這種情況都是出現在高密度,以及低密度的手機上,比如說一部240×320畫素的手機,如果設定android:anyDensity="false",Android系統會將240
x 320(低密度)轉換為 320×480(中密度),這樣的話,應用
總結一下:
第一:android:anyDensity="true",系統會依據螢幕密度,自動去找對應的資料夾
第二:android:anyDensity="false",
(1)如果drawable-hdpi,drawable-mdpi,drawable-ldpi三個資料夾中有同一張圖片資源的不同密度表示,那麼系統會去載入drawable_mdpi資料夾中的資源
(2)如果drawable-hpdi中有高密度圖片,其它兩個資料夾中沒有對應圖片資源,那麼系統會去載入drawable-hdpi中的資源。
(3)如果drawable-hdpi,drawable-mdpi中有圖片資源,drawable-ldpi中沒有對應的圖片資源,那麼系統會載入drawable-mdpi資料夾中的資源
注意上圖各種資料夾的不同表示。
drawable-hdpi 該圖片即適用於橫屏,也適用於豎屏
drawable-land-hdpi,當螢幕為橫屏,且為高密度時,載入此資料夾中的資源
drawable-port-hdpi,當螢幕為豎屏,且為高密度時,載入此資料夾中的資源
要實現螢幕的適配,要針對不同的螢幕提供一套對應的介面。
layout-320X240
layout-480x320
注意解析度大的數字寫在前面!
三、樣式和主題
主題的應用和樣式是一樣的區別在於,樣式是作用在某一個控制元件上的,主題是作用在一個Activity或Application上的。
樣式:
1.styles.xml檔案
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="textViewStyle">
<item name="android:textSize">22sp</item>
<item name="android:textColor">red</item>
</style>
</resources>
使用:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自定義樣式"
style="@style/textViewStyle"/>
另一種繼承方式
在styles.xml中如下定義(如果要修改父樣式的某個屬性只要覆蓋就好了)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="textViewStyle">
<item name="android:textSize">22sp</item>
<item name="android:textColor">#FF0000</item>
</style>
<style name="childStyle" parent="textViewStyle">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#00FF00</item>
</style>
</resources>
主題:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="qnTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
</resources>
可以寫成<item name="android:windowFullscreen">?android:windowNoTitle</item>
?表示引用在當前主題當中定義過的資源的值。
注意:當樣式和主題衝突的時候,優先使用樣式!!