回應系統設定的事件(Configuration類別)
本節引言:
本節給大家介紹的Configuration類別是用來描述手機設備的配置資訊的,例如螢幕方向, 觸控螢幕的觸控方式等,相信自訂過ROM的朋友都應該知道我們可以在: frameworks/base/core/java/android/content/res/Configuration.java 找到這個類,然後改下相關設置,例如調整預設字體的大小!有興趣可自行了解! 本節講解的Configuration類別在我們Android開發的使用~ API文件:Configuration
1.Configuration給我們提供的方法清單
- ##densityDpi:螢幕密度
- fontScale:目前使用者設定的字體的縮放因子
- hardKeyboardHidden:判斷硬鍵盤是否可見,有兩個可選值:HARDKEYBOARDHIDDEN_NO,HARDKEYBOARDHIDDEN_YES,分別是十六進位的0和1
- keyboard:取得目前關聯額鍵盤類型:此屬性的回傳值:KEYBOARD_12KEY(只有12個按鍵的小鍵盤)、KEYBOARD_NOKEYS、 KEYBOARD_QWERTY(普通鍵盤)
- keyboardHidden:此屬性傳回一個boolean值用於識別目前鍵盤是否可用。此屬性不僅會判斷系統的硬體鍵盤,也會判斷系統的軟鍵盤(位於螢幕)。
- locale:取得使用者目前的語言環境
- mcc:取得行動訊號的國家碼
- mnc :取得行動訊號的網路碼ps:國家代碼和網路程式碼共同決定目前手機網路營運商
- navigation:判斷系統上方向導航裝置的類型。此屬性的傳回值:NAVIGATION_NONAV(無導航)、 NAVIGATION_DPAD(DPAD導航)NAVIGATION_TRACKBALL(軌跡球導航)、NAVIGATION_WHEEL(滾輪導航)
- orientation:取得系統螢幕的方向。此屬性的回傳值:ORIENTATION_LANDSCAPE(橫向螢幕)、ORIENTATION_PORTRAIT(垂直螢幕)
- screenHeightDp,screenWidthDp:螢幕可用高和寬,用dp表示
- touchscreen:取得系統觸控螢幕的觸控方式。此屬性的回傳值:TOUCHSCREEN_NOTOUCH(無觸控螢幕)、TOUCHSCREEN_STYLUS(觸控筆觸控螢幕)、TOUCHSCREEN_FINGER(接收手指的觸控螢幕)
2.寫個簡單範例測試下寫個簡單範例測試下:
運行截圖:
程式碼實作:
public class MainActivity 擴充 AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState); setContentView(R.layout. Activity_main);
TextView txtResult = (TextView) findViewById(R.id.txtResult);
//①取得系統的Configuration物件
Configuration cfg = getResources ().getConfiguration();
//②想查什麼查什麼
status.append("densisDpi:" fontScale: " + cfg.fontScale + "\n");
status.append("hardKeyboardHidden:" + cfg.hardKeyboardHidden "\n.; + "\n");
status.append("keyboardHidden:" + cfg.keyboardHidden + "\n");
status.append("mcc:" + cfg.mcc + "\n");
stat us.append ("導航:" + cfg.navigation + "\n");
status.append("navigationHidden:" + cfg.navigationHden +#"\n");#.app cfg.orientation + "\n");
status.append("screenHeightDp:" + cfg.screenHeightDp + p. .screenWidthDp + "\ n");
status.append("screenLayout:" + cfg.screenLayout + "\n");
status.append("smallestScreenWidthDp:" status.append("smallestScreenWidthDp:" status.append("smoo .append("觸控螢幕:" + cfg.密度Dpi + "\n");
status.append("uiMode:" + cfg.密度Dpi + );
}
#}
#
權限:
@Override
protected void onCreate(Bundle savedInstanceState); setContentView(R.layout. Activity_main);
TextView txtResult = (TextView) findViewById(R.id.txtResult);
//①取得系統的Configuration物件
Configuration cfg = getResources ().getConfiguration();
//②想查什麼查什麼
status.append("densisDpi:" fontScale: " + cfg.fontScale + "\n");
status.append("hardKeyboardHidden:" + cfg.hardKeyboardHidden "\n.; + "\n");
status.append("keyboardHidden:" + cfg.keyboardHidden + "\n");
status.append("mcc:" + cfg.mcc + "\n");
stat us.append ("導航:" + cfg.navigation + "\n");
status.append("navigationHidden:" + cfg.navigationHden +#"\n");#.app cfg.orientation + "\n");
status.append("screenHeightDp:" + cfg.screenHeightDp + p. .screenWidthDp + "\ n");
status.append("screenLayout:" + cfg.screenLayout + "\n");
status.append("smallestScreenWidthDp:" status.append("smallestScreenWidthDp:" status.append("smoo .append("觸控螢幕:" + cfg.密度Dpi + "\n");
status.append("uiMode:" + cfg.密度Dpi + );
}
#}
#
3.重寫onConfigurationChanged回應系統設定變更
此方法用於監聽系統設定的變更,是基於回呼的時間處理方法,當系統的設定發生改變時就會自動觸發; 但是要注意一點,使用下面的方法監控的話,targetSdkVersion屬性最高只能設定為12,高於12的話,該方法不會被激發!這裡寫個橫豎屏切換的例子給大家參考參考,其他的可自行谷歌~
代碼範例:簡單的一個按鈕,點擊後切換橫豎屏,然後Toast提示
執行效果圖:
實作程式碼:
public class MainActivity 擴展 Activity {
@Override
protected void onCreate anceState);
setContentView(R.layout.activity_main);
以 btn = (Button) findViewById(R.id.btncahange);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
/ /若是橫螢幕切換成垂直螢幕
if(config.orientation == Configuration.ORIENTATION_LANDSCA #
//若有垂直螢幕
的話 {
# }
) 而言 #});
}
@Override
public嗚er.onConfigurationChanged(newConfig);
String screen = newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ?"橫屏":"垂直螢幕";
Toast.makeText(MainActivity.this, "系統螢幕方向發生改變 \n 修改後的方向為" + screen,Toast.LENGTH_SHORT. # }
}
另外,也需要在AndroidManifest.xml新增下述內容:@Override
protected void onCreate anceState);
setContentView(R.layout.activity_main);
以 btn = (Button) findViewById(R.id.btncahange);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
/ /若是橫螢幕切換成垂直螢幕
if(config.orientation == Configuration.ORIENTATION_LANDSCA #
//若有垂直螢幕
的話 {
# }
) 而言 #});
}
@Override
public嗚er.onConfigurationChanged(newConfig);
String screen = newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ?"橫屏":"垂直螢幕";
Toast.makeText(MainActivity.this, "系統螢幕方向發生改變 \n 修改後的方向為" + screen,Toast.LENGTH_SHORT. # }
}
< uses-permission android:name ="android.permission.CHANGE_CONFIGURATION" />本節小結:在< activity標籤中加入:android:configChanges="orientation"將targetSdkVersion改為12以上的,12也可以