馬上加入Android 台灣中文網,立即免費下載應用遊戲。
您需要 登錄 才可以下載或查看,沒有帳號?註冊
x
這是小弟之前做app時遇到的問題,以下是我後來找到可以解決的方法,跟大家分享:
在做android或者Ophone開發時,在默認情況下當螢幕從豎屏變到橫屏時會觸發 onConfigurationChanged事件。在默認情況下會重新載入畫面並顯示和橫屏一樣的畫面,這樣會有2個問題:
1.佈局問題:在豎屏 顯示的佈局 到橫屏中由於寬和高發生了變化所有多少都會影響到佈局(除非你定制2套畫面在然後加個判斷在橫屏時怎麼顯示,在豎屏時怎麼顯示),當然最簡單的辦法就是在項目的AndroidManifest.xml中找到你所指定的activity 中加上
只豎屏顯示的話(android:screenOrientation="portrait")
只橫屏顯示的話(android:screenOrientation="landscape")
2.畫面重新載入問題:在默認情況下橫豎切換時會重新載入畫面,導致一些不必要的資源浪費,更嚴重的是畫面上保持的資料(特別是遊戲方面)也都被重置了(當然你可以在重置前保存這些資料到資料庫或者到文字檔案中),要怎麼避免在橫豎切換時重新載入畫面,
1.首先要在 AndroidManifest.xml中找到你所指定的activity中加上
android:configChanges="orientation|keyboardHidden"
2.然後 在activity的邏輯處理中(代碼部分)去重載onConfigurationChanged事件,具體代碼參考一下:
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
}
以上就可以簡單的控制你的app畫面的顯示方式並且在顯示方式不變的情況下橫豎屏切換時不會重新載入畫面,即優化的你的app同時用戶體驗也相應提高了。
但是在自從android3.2以後,再這樣設置的話,會發現轉屏後仍然會調用OnCreate(),而不是onConfigurationChanged();跟蹤framework層代碼,就會發現問題所在,是由於google在android3.2中添加了screensize改變的通知,在轉屏的時候,不僅是orientation發生了改變,screensize同樣也發生了改變,而在判斷是調用onConfigurationChanged還是OnCreate時,採用的是如下判斷:
int diff = activity.mCurrentConfig.diff(config);
if (diff != 0) {
// If this activity doesn't handle any of the config changes then don't bother calling onConfigurationChanged as we'regoing to destroy it.
if ((~activity.mActivityInfo.getRealConfigChanged()& diff) == 0) {
shouldChangeConfig = true;
}
}
public int getRealConfigChanged() {
return applicationInfo.targetSdkVersion < android.os.Build.VERSION_CODES.HONEYCOMB_MR2 ? (configChanges | ActivityInfo.CONFIG_SCREEN_SIZE
| ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE) : configChanges;
}
通過上面的分析,可發現有兩種方法解決該問題:(只需要修改AndroidManifest.xml)
1.指定android:configChanges="keyboardHidden|orientation|screenSize",其他的代碼和以前的代碼一樣處理;
2.在AndroidManifest.xml中指定targetSdkVersion為3.2以前的版本(3.2的版本號為13),系統會自動加上screenSize屬性值。
建議使用第一種方法。
|
評分
-
查看全部評分
|