目前一般情況下 在橫豎屏情況下 我們會遇到一些問題 例如橫豎屏顯示ui 比例問題 還有activity重啟問題 今天說三個問題 一是橫豎屏切換 二是 禁止屏幕旋轉(zhuǎn)
說一下屏幕切換時 的activity 生命周期?
onPause()—->onDestroy()—–>onCreate()
先說第一個 橫豎屏切換 一般的套路如下
在manifast.xml 中 給當(dāng)前activity配置 防止activity在屏幕切換時 activity 重建問題
android:configChanges="orientation|keyboardHidden|screenSize"
獲取屏幕方向
int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
? ? ? ? ? ? setContentView(R.layout.horizontallayout);? ? ? ? } else if (orientation == Configuration.ORIENTATION_PORTRAIT) {
? ? ? ? ? ? setContentView(R.layout.verticallayout);}
監(jiān)聽屏幕方向 并處理數(shù)據(jù)
@Override public void onConfigurationChanged(Configuration newConfig) {
? ? ? ? ? // 處理你的數(shù)據(jù)? ? ? ? super.onConfigurationChanged(newConfig);
? ? }
二 禁止屏幕旋轉(zhuǎn)?
第一 要先設(shè)置屏幕方向
manifast.xml 設(shè)置給activity屏幕方向
android:screenOrientation="portrait"http:// 設(shè)置豎屏android:configChanges="orientation|keyboardHidden|screenSize"http:// 防止activity 重建
在java 代碼中設(shè)置
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
二者選一即可
第二? 為了防止用戶開啟了屏幕切換權(quán)限 進(jìn)行屏幕監(jiān)聽
@Override? ? public void onConfigurationChanged(Configuration newConfig) {
? ? ? ? ? ? ? // 進(jìn)行數(shù)據(jù)處理? ? ? ? super.onConfigurationChanged(newConfig);
? ? }
第三? 保存數(shù)據(jù) 防止activity 被銷毀重建 進(jìn)行數(shù)據(jù)處理
@Override? ? protected void onSaveInstanceState(Bundle outState) {
? ? ? ? super.onSaveInstanceState(outState);
? ? // 保存數(shù)據(jù)? ? }
或者在onpush 方法中保存
在oncreate() 方法中獲取數(shù)據(jù) 進(jìn)行設(shè)置即可
注意 此處會有一個問題 就是 當(dāng)客戶開啟了屏幕旋轉(zhuǎn)的權(quán)限時 橫屏啟動時可能會出現(xiàn)閃退 情況
先說一下 我們的app 啟動 app 啟動默認(rèn)的豎屏啟動的 但是如果在啟動過程中 app 感應(yīng)到重力發(fā)生變化 activity 就會發(fā)生改變 無論你有沒有設(shè)置方向 而此時就有可能刪除 這是數(shù)據(jù)問題 異常自己捕獲就好了