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();
}