Android中的資源與國際化!(轉)

好久沒更新博客了,今天給大家分享一下Android中的資源與國際化的問題,通常我們新建一個Android工程,目錄結構如下圖所示:

我們主要看一下layout與values目錄,layout裏的xml文件的我們應用使用佈局的文件,values裏的sring.xml是用來存放文字資源,一個key對應一個value值。

但是在實際應用開發中,通常橫屏(land)與豎屏(port)可能佈局文件有所不同,這時候我們可以獨自定義橫屏與豎屏的佈局文件( 文件名字要一樣),默認情況是加載layout目錄裏的佈局文件。同樣應用還要支持不同的語言,如果我們應用裏沒有定義手機所用語言的資源時,會默認加載 values的值。

爲了方便大家理解下面做個簡單的Demo.具體步驟如下:

第一步:新建一個Android工程,命名爲ResourceDemo。

我們看一下layout目錄下的自動生成的main.xml佈局文件,代碼如下:

  1. <?xml version= "1.0"  encoding= "utf-8" ?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:orientation="vertical"   
  4.     android:layout_width="fill_parent"   
  5.     android:layout_height="fill_parent"   
  6.     >  
  7. <TextView    
  8.     android:layout_width="fill_parent"    
  9.     android:layout_height="wrap_content"    
  10.     android:text="@string/hello"   
  11.     />  
  12. </LinearLayout>  

其中我們程序顯示的文本內容是在values/string.xml文件中對應的hello的值,代碼如下:

  1. <?xml version= "1.0"  encoding= "utf-8" ?>  
  2. <resources>  
  3.     <string name="hello" >Hello World, ResourceDemo!</string>  
  4.     <string name="app_name" >ResourceDemo</string>  
  5. </resources>  

運行效果如下圖所示:

port(豎屏模式)效果:

Ctrl+F11快捷鍵模擬器變成橫屏(land)模式:

第二步:我們定義land與port模式的佈局文件,即在res/目錄下創建layout-land與layout-port兩個文件夾,目錄結果如下所示:

layout-land目錄下main.xml和layout內容基本一樣,只是顯示內容不同,代碼如下:

  1. <?xml version= "1.0"  encoding= "utf-8" ?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:orientation="vertical"   
  4.     android:layout_width="fill_parent"   
  5.     android:layout_height="fill_parent"   
  6.     >  
  7. <TextView    
  8.     android:layout_width="fill_parent"    
  9.     android:layout_height="wrap_content"    
  10.     android:text="@string/land"   
  11.     />  
  12. </LinearLayout>  

同理layou-port目錄下main.xml代碼如下:

  1. <?xml version= "1.0"  encoding= "utf-8" ?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:orientation="vertical"   
  4.     android:layout_width="fill_parent"   
  5.     android:layout_height="fill_parent"   
  6.     >  
  7. <TextView    
  8.     android:layout_width="fill_parent"    
  9.     android:layout_height="wrap_content"    
  10.     android:text="@string/port"   
  11.     />  
  12. </LinearLayout>  

當然我們顯示的內容是在values/string.xml文件裏定義的,這裏加了兩個值,代碼如下:

  1. <?xml version= "1.0"  encoding= "utf-8" ?>  
  2. <resources>  
  3.     <string name="hello" >Hello World, ResourceDemo!</string>  
  4.     <string name="app_name" >ResourceDemo</string>  
  5.     <string name="land" >This is land mode.</string>  
  6.      <string name="port" >This is port mode.</string>  
  7. </resources>  

然後再次運行程序,效果如下:

豎屏(port)效果:

橫屏(land)下效果:

通過上面例子可以得出如果我們已經定義了橫屏與豎屏佈局文件時,就不會在加載layout裏的同名佈局文件。

下面我們來講點國際化,通常國際化我們只要在res/目錄下在重新定義values-國家編號,如values-zh-rCN簡體漢語,values-zh-rTW繁體,values-jp日語等。

目錄結構如下圖所示:

這裏我只在values-zh-rCN作了改動,代碼如下:

  1. <?xml version= "1.0"  encoding= "utf-8" ?>  
  2. <resources>  
  3.     <string name="hello" >Hello World, ResourceDemo!</string>  
  4.     <string name="app_name" >ResourceDemo</string>  
  5.     <string name="land" >這是橫屏模式.</string>  
  6.      <string name="port" >這是豎屏模式.</string>  
  7. </resources>  

我們運行程序之前,把手機語言改成中文,在settings(設置)->language & keyboards(語言與鍵盤)目錄下,選擇簡體中文,如下圖所示:

最然在運行上述工程,效果如下:

這時候我們應用的顯示內容就爲中文了,而不去顯示values/strings.xml裏的內容。

Ok~今天就到這裏,希望對大家特別是初學者有點幫助.Thx~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章