1. 程式人生 > >Android國際化和螢幕適配

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(中密度),這樣的話,應用

就會在小密度手機上載入mdpi檔案中的資源。

總結一下:

第一: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>

?表示引用在當前主題當中定義過的資源的值。

注意:當樣式和主題衝突的時候,優先使用樣式!!