android:configChanges

無名_四葉草發表於2020-04-05

一般在AndroidManifest.xml檔案中都沒有使用到android:configChanges="keyboardHidden|orientation"配置,當然還是很有用的。

就是如果配置了這個屬性,當我們橫豎屏切換的時候會直接呼叫onCreate方法中的onConfigurationChanged方法,而不會重新執行onCreate方法,那當然如果不配置這個屬性的話就會重新呼叫onCreate方法了。

通過設定這個屬性可以使Activity捕捉裝置狀態變化,以下是可以被識別的內容:  

CONFIG_FONT_SCALE 
CONFIG_MCC 
CONFIG_MNC 
CONFIG_LOCALE 
CONFIG_TOUCHSCREEN 
CONFIG_KEYBOARD 
CONFIG_NAVIGATION 
CONFIG_ORIENTATION 

設定方法:將下列欄位用“|”符號分隔開,例如:“locale|navigation|orientation 

VALUE                         DESCRIPTION                                                                                                                                                                                      
"mcc" 國際移動使用者識別碼所屬國家代號是改變了-----  sim被偵測到了,去更新mcc    mcc是移動使用者所屬國家代號
"mnc" 國際移動使用者識別碼的移動網號碼是改變了------ sim被偵測到了,去更新mnc    MNC是移動網號碼,最多由兩位數字組成,用於識別移動使用者所歸屬的行動通訊網
"locale" 地址改變了-----使用者選擇了一個新的語言會顯示出來
"touchscreen" 觸控式螢幕是改變了------通常是不會發生的
"keyboard" 鍵盤發生了改變----例如使用者用了外部的鍵盤
"keyboardHidden" 鍵盤的可用性發生了改變
"navigation" 導航發生了變化-----通常也不會發生
"screenLayout" 螢幕的顯示發生了變化------不同的顯示被啟用
"fontScale" 字型比例發生了變化----選擇了不同的全域性字型
"uiMode" 使用者的模式發生了變化
"orientation" 螢幕方向改變了
"screenSize" 螢幕大小改變了
"smallestScreenSize" 螢幕的物理大小改變了,如:連線到一個外部的螢幕上

android:configChanges

在android中每次螢幕的切換動會重啟Activity,所以應該在Activity銷燬前儲存當前活動的狀態,在Activity再次Create的時候載入配置。在activity加上android:configChanges="keyboardHidden|orientation"屬性,就不會重啟activity.而只是呼叫onConfigurationChanged(Configuration newConfig).這樣就可以在這個方法裡調整顯示方式.

    public void onConfigurationChanged(Configuration newConfig) {  
            try {  
                super.onConfigurationChanged(newConfig);  
                if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {  
                    Log.v("Himi", "onConfigurationChanged_ORIENTATION_LANDSCAPE");  
                } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {  
                    Log.v("Himi", "onConfigurationChanged_ORIENTATION_PORTRAIT");  
                }  
            } catch (Exception ex) {  
            }  
        }  
xml

<?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:configChanges="keyboardHidden|orientation">  
            <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> 



相關文章