橫豎屏問題總結


橫豎屏問題總結


一、橫豎屏切換時Activity 生命週期的總結

(1)不設置Activityandroid:configChanges時,切屏會重新調用各個生命週期,切橫屏時會執行一次,切豎屏會執行兩次

(2)設置Activityandroid:configChanges="orientation"時,切屏還是會重新調用各個生命週期,切橫、豎屏時會執行一次

(3)設置Activityandroid:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged方法

注意:當前Activity產生事件彈出ToastAlertDialog的時候Activity的生命週期不會有改變


二、橫豎屏切換時UI處理

(1)在Mainifest.xml的Activity元素中加入 android:screenOrientation="portrait"屬性表示UI界面豎屏顯示

(2)在Mainifest.xml的Activity元素中加入 android:screenOrientation="landscape"屬性表示UI界面橫屏顯示

(3)在Mainifest.xml的Activity元素中加入android:configChanges="orientation|keyboardHidden"屬性

       

<span style="font-size:18px;"> <activity android:name=".SecondActivity"
     android:label="@string/app_name"
     android:configChanges="orientation|keyboardHidden">
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
 </activity></span>

聲明這個屬性,表示應用中會處理屏幕方向和鍵盤狀態(推出或合上)信息的改動,並且需要在此Activity類中,重寫onConfigurationChanged()方法:

<span style="font-size:18px;"> @Override
  public voidonConfigurationChanged(Configuration newConfig) {            
         super.onConfigurationChanged(newConfig);
          // 檢測屏幕的方向:縱向或橫向
         if (this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_LANDSCAPE) {
                //當前爲橫屏,在此處添加額外的處理代碼
             }
         else if (this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
                //當前爲豎屏,在此處添加額外的處理代碼
              }
             //檢測實體鍵盤的狀態:推出或者合上   
         if(newConfig.hardKeyboardHidden==Configuration.HARDKEYBOARDHIDDEN_NO){
             //實體鍵盤處於推出狀態,在此處添加額外的處理代碼
            }
        else if(newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_YES){
            //實體鍵盤處於合上狀態,在此處添加額外的處理代碼
            }
  }</span>

三、禁止橫豎屏切換

AndroidManifest.xml裏面的代碼:

AndroidManifest.xml 裏面加入這一行 android:screenOrientation="landscape "landscape是橫向,portrait是縱向)。

<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.himi" android:versionCode="1" android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
        <activity android:name=".MainActivity" android:label="@string/app_name" 
           android:screenOrientation="landscape"> 
            <intent-filter> 
                <action android:name="android.intent.action.MAIN"/> 
                <category android:name="android.intent.category.LAUNCHER"/> 
            </intent-filter> 
        </activity> 
    </application> 
    <uses-sdk android:minSdkVersion="4"/> 
</manifest>
</span>


補充:(未驗證)https://github.com/android-cn/android-discuss/issues/8

發佈了40 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章