淺析Android之Configuration

Android中Configuration類專門用於描述手機設備上的配置信息,這些配置信息既包括用戶特定的配置項,也包括系統的動態設備配置。

Configuration對象的獲得:

Configuration configuration=getResources().getConfiguration();

這樣我們就可以通過Configuration對象提供的基本屬性來獲取系統的配置信息,例如:

    public int densityDpi;  //得到設備的密度
    public float fontScale; //獲取當前用戶設置的字體的縮放因子
    public int KeyboardHidden;//該屬性會返回一個boolean值用於表示當前的鍵盤是否可用,該屬性不僅會判斷系統的硬件鍵盤,也會判斷系統位於屏幕上的軟鍵盤,如果該系統的硬件鍵盤不可用但軟鍵盤可用該屬性會返回KEYBOARDHIDDEN_NO,只有當兩個鍵盤都不可用的時候才返回KEYBOARDHIDDEN_YES
    public int keyboard;//獲取當前設備所關聯的鍵盤的類型
    public Locale locale;//獲取用於當前的Locale
    public int mcc;//得到移動信號的國家碼
    public int mnc;//得到移動信號的網絡碼
    public int navigation;//判斷系統上方向導航設備的類型。該屬性的返回值:NAVIGATION_NONAV(無導航)、NAVIGATION_DPAD(DPAD導航)、NAVIGATION_TRACKBALL(軌跡球導航)、NAVIGATION_WHEEL(滾輪導航)
    public int orientation;//得到系統屏幕的方向,該屬性將會返回ORIENTATION_LANDSCAPE(橫向屏幕),ORIENTATION_PORTRAIT(豎向屏幕),ORIENTATION_SQUARE(方形屏幕)三個屬性值之一
    public int touchscreen;//獲取系統觸摸屏的觸摸方式。該屬性的返回值:TOUCHSCREEN_NOTOUCH(無觸摸屏)、TOUCHSCREEN_STYLUS(觸摸筆式觸摸屏)、TOUCHSCREEN_FINGER(接收手指的觸摸屏)等屬性值

此外,如果程序需要監聽系統設置的更改,這裏就需要重寫Activity的onConfigurationChanged(Configuration newConfig)的方法,例如我們要實現設置系統的屏幕更改方向並監聽,需要有以下幾步:
指定清單文件中的configChanges屬性

   <activity android:name=".MainActivity"
             android:configChanges="screenSize|orientation">
            <intent-filter>
              <action android:name="android.intent.action.MAIN"/>
              <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
    </activity>

設置按鈕的點擊事件,並重寫回調方法:

    public void changeOri(View view){
        Configuration configuration=getResources().getConfiguration();
        if(configuration.orientation==Configuration.ORIENTATION_LANDSCAPE){
            //當前是橫屏,需要更改爲豎屏
            MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        if(configuration.orientation==Configuration.ORIENTATION_PORTRAIT){
            //當前是豎屏,需要更改爲橫屏
            MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        String screen=newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE?"橫屏":"豎屏";
        Toast.makeText(this,"當前屏幕的狀態是:"+screen,Toast.LENGTH_SHORT).show();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章