Android適配不一樣的設備

感謝原做者的整理:java

http://blog.csdn.net/chenyjays/article/details/41308887android

 

適配不一樣的語言app

  把UI中的字符串存儲在外部文件,經過代碼提取。測試

 

建立區域設置目錄和字符串文件優化

  爲了支持多國語言,在res/中建立一個額外的values目錄以連字符和ISO國家代碼結尾命名,好比values-es/ 是爲語言代碼爲"es"的區域放置簡單的資源文件的目錄。Android會在運行時根據設備的區域設置,加載相應的資源。ui

 

  若你決定支持某種語言,則須要建立資源子目錄和字符串資源文件,例如:spa

MyProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml

  添加不一樣區域語言的字符串值到相應的文件。在運行時,android系統會根據用戶設備當前的區域設置,使用相應的字符串資源。操作系統

 

使用字符資源
  你能夠在你的源代碼和其餘XML文件中,經過<string>元素的name屬性來引用你的字符串資源。
  在你的源代碼中你能夠經過R.string.<string_name>語法來引用一個字符串資源,不少方法均可以經過這種方式來接受字符串。.net

 

適配不一樣的屏幕設計

  Android將設備屏幕歸類爲兩種常規屬性:尺寸和分辨率。

  有4種廣泛尺寸:小(small),普通(normal),大(large),超大(xlarge)
  4種廣泛分辨率:低精度(ldpi), 中精度(mdpi), 高精度(hdpi), 超高精度(xhdpi)

 

建立不一樣的layout

  爲了針對不一樣的屏幕去優化用戶體驗,你須要對每一種將要支持的屏幕尺寸,建立惟一的XML文件。每一種layout須要保存在相應的資源目錄中,目錄以-<screen_size>爲後綴命名。例如,對大尺寸屏幕(large screens),一個惟一的layout文件應該保存在res/layout-large/中。

 

  例如,這個工程包含一個默認layout和一個適配大屏幕的layout:

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

  layout文件的名字必須徹底同樣,爲了對相應的屏幕尺寸提供最優的UI,文件的內容不一樣。

  按照慣例在你的app中簡單引用:

  protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  }

  系統會根據你的app所運行的設備屏幕尺寸,在與之對應的layout目錄中加載layout。

  另外一個例子,這一個工程中有爲適配橫向屏幕的layout:

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

  默認的,layout/main.xml文件用做豎屏的layout。

  若是你想給橫屏提供一個特殊的layout,也適配於大屏幕,那麼你須要使用largeland修飾符。

   MyProject/
    res/
        layout/              # default (portrait)
          main.xml
    layout-land/         # landscape
       main.xml
   layout-large/        # large (portrait)
       main.xml
    layout-large-land/   # large landscape
       main.xml

建立不一樣的bitmap

  你應該爲4種廣泛分辨率:低,中,高,超高精度,都提供相適配的bitmap資源。要生成這些圖像,你應該從原始的矢量圖像資源着手,而後根據下列尺寸比例,生成各類密度下的圖像。

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

  這意味着,若是你針對xhdpi的設備生成了一張200x200的圖像,一樣的你應該對爲hdpi生成150x150,爲mdpi生成100x100, 和爲ldpi生成75x75的圖片資源。

  而後,將這些文件放入相應的drawable資源目錄中:

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

  任什麼時候候,當你引用@drawable/awesomeimage時系統會根據屏幕的分辨率選擇恰當的bitmap。

 

適配不一樣的系統版本

指定最小和目標API級別

  AndroidManifest.xml文件中描述了你的app的細節,而且標明app支持哪些Android版本。具體來講,<uses-sdk>元素中的minSdkVersion和targetSdkVersion 屬性,標明在設計和測試app時,最低兼容API的級別和最高適用的API級別(這個最高的級別是須要經過你的測試的)。

  隨着新版本Android的發佈,一些風格和行爲可能會改變,爲了能使你的app能利用這些變化,並且能適配不一樣風格的用戶的設備,你應該設置targetSdkVersion的值去匹配最新的可用Android版本。

 

在運行時檢查系統版本

 

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
         actionBar.setDisplayHomeAsUpEnabled(true);
  }

 

 

使用平臺風格和主題

 

  Android提供了用戶體驗主題,爲app提供基礎操做系統的外觀和體驗。這些主題能夠在manifest文件中被應用於你的app中.經過使用內置的風格和主題,你的app天然地隨着Android新版本的發佈,自動適配最新的外觀和體驗.

  使你的activity看起來像對話框:

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

  使你的activity有一個透明背景:

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

  應用在/res/values/styles.xml中定義的自定義主題:

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

  使整個app應用一個主題(所有activities)在元素中添加android:theme屬性:

  <application android:theme="@style/CustomTheme">
相關文章
相關標籤/搜索