接觸安卓有一段時間了,個人感覺安卓頁面自適應這塊比web復雜的多,因為手機開發要考慮多種屏幕,下面就對這塊做一下總結:
一:不同的layout
Android手機屏幕大小不一,有480x320, 640x360, 800x480.怎樣才能讓Application自動適應不同的屏幕呢?
其實很簡單,只需要在res目錄下創建不同的layout文件夾,比如layout-640x360,layout-800x480,所有的layout文件在編譯之後都會寫入R.java裡,而系統會根據屏幕的大小自己選擇合適的layout進行使用。
二:hdpi、mdpi、ldpi
在之前的版本中,只有一個drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三個,這三個主要是為了支持多分辨率。
drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:
(1)drawable-hdpi裡面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi裡面存放中等分辨率的圖片,如HVGA (320x480)
(3)drawable-ldpi裡面存放低分辨率的圖片,如QVGA (240x320)
系統會根據機器的分辨率來分別到這幾個文件夾裡面去找對應的圖片。
在開發程序時為了兼容不同平台不同屏幕,建議各自文件夾根據需求均存放不同版本圖片。
三:橫堅屏切換
在開發游戲的時候,有些游戲是只能橫屏玩的,所以手機豎立放置的時候,要保持游戲畫面依然橫屏。要做到這個要求其實很簡單,
在AndroidManifest.xml裡面配置一下就可以了。加入這一行android:screenOrientation="landscape"。
例如(landscape是橫向,portrait是縱向):
Java代碼
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ray.linkit"
android:versi
android:versi>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".GamePlay"
android:screenOrientation="portrait"></activity>
<activity android:name=".OptionView"
android:screenOrientation="portrait"></activity>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
1.另外,android中每次屏幕的切換動會重啟Activity,所以應該在Activity銷毀前保存當前活動的狀態,
在Activity再次Create的時候載入配置,那樣,進行中的游戲就不會自動重啟了!
2.也可以給每個activity加上android:c屬性,就不會重啟activity.而是去調用onConfigurationChanged(Configuration newConfig). 這樣就可以在這個方法裡調整顯示方式.
比如
Java代碼
if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
//橫向
setContentView(R.layout.file_list_landscape);
}else{
//豎向
setContentView(R.layout.file_list);
}
在做android或者Ophone開發時,在默認情況下當屏幕從豎評變到橫屏時會觸發 onConfigurationChanged 事件在默認情況下會重新加載畫面並顯示和橫評一樣的畫面,這樣會有2個問題,
布局問題,在豎屏 顯示的布局到橫屏中由於寬和高發生了變化所有多少都會影響到布局(除非你定制2套畫面在然後加個判斷在橫屏時怎麼顯示,在豎屏時怎麼顯示),當然最簡單的辦法就是在項目的 AndroidManifest.xml中找到你所指定的activity 中加上
只豎屏顯示的話(android:screenOrientation="portrait")
只橫屏顯示的話(android:screenOrientation="landscape")
畫面重新載入問題:在默認情況下橫豎切換時會重新載入畫面,導致一些不必要的資源浪費,更嚴重的是畫面上保持的數據(特別是游戲方面)也都被重置了(當然你可以在重置前保存這些數據到數據庫或者到文本文件中),要怎麼避免在橫豎切換時重新載入畫面,
首先要在 AndroidManifest.xml中找到你所指定的activity 中加上android:configChanges="orientation|keyboardHidden"
然後 在activity的邏輯處理中(代碼部分)去重載onConfigurationChanged事件,具體代碼參考一下:
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
}
以上就可以簡單的控制你的app畫面的顯示方式並且在顯示方式不變的情況下橫豎屏切換時不會重新加載畫面,即優化的你的app同時用戶體驗也相應提高了。