廣大博友,看過後幫忙頂頂,謝謝大家!!!
轉載請註明: http://blog.csdn.net/richway2010/archive/2011/06/29/6574987.aspx
博主:各位博友,網友們,大家網上好!歡迎光臨本部落格。 歡迎多多交流,多提意見,互相學習,互相進步,我們的口號是:好好學習,天天向上。】
接觸安卓有一段時間了,個人感覺安卓頁面自適應這塊比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是縱向):
代碼
<?xml version="1.0" encoding="utf-8"?><br /><manifest xmlns:android="http://schemas.android.com/apk/res/android"<br /> package="com.ray.linkit"<br /> android:versi<br /> android:versi><br /> <application android:icon="@drawable/icon" android:label="@string/app_name"><br /> <activity android:name=".Main"<br /> android:label="@string/app_name"<br /> android:screenOrientation="portrait"><br /> <intent-filter><br /> <action android:name="android.intent.action.MAIN" /><br /> <category android:name="android.intent.category.LAUNCHER" /><br /> </intent-filter><br /> </activity><br /> <activity android:name=".GamePlay"<br /> android:screenOrientation="portrait"></activity><br /> <activity android:name=".OptionView"<br /> android:screenOrientation="portrait"></activity><br /> </application><br /> <uses-sdk android:minSdkVersion="3" /><br /></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同時使用者體驗也相應提高了。