吳裕雄--天生自然ANDROID開發學習:3.6 響應系統設定的事件(Configuration類)
阿新 • • 發佈:2020-08-29
API文件:Configuration:http://androiddoc.qiniudn.com/reference/android/content/res/Configuration.html
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(接收手指的觸控式螢幕)
程式碼實現: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView txtResult = (TextView) findViewById(R.id.txtResult); StringBuffer status = new StringBuffer(); //①獲取系統的Configuration物件 Configuration cfg = getResources().getConfiguration(); //②想查什麼查什麼 status.append("densityDpi:" + cfg.densityDpi + "\n"); status.append("fontScale:" + cfg.fontScale + "\n"); status.append("hardKeyboardHidden:" + cfg.hardKeyboardHidden + "\n"); status.append("keyboard:" + cfg.keyboard + "\n"); status.append("keyboardHidden:" + cfg.keyboardHidden + "\n"); status.append("locale:" + cfg.locale + "\n"); status.append("mcc:" + cfg.mcc + "\n"); status.append("mnc:" + cfg.mnc + "\n"); status.append("navigation:" + cfg.navigation + "\n"); status.append("navigationHidden:" + cfg.navigationHidden + "\n"); status.append("orientation:" + cfg.orientation + "\n"); status.append("screenHeightDp:" + cfg.screenHeightDp + "\n"); status.append("screenWidthDp:" + cfg.screenWidthDp + "\n"); status.append("screenLayout:" + cfg.screenLayout + "\n"); status.append("smallestScreenWidthDp:" + cfg.densityDpi + "\n"); status.append("touchscreen:" + cfg.densityDpi + "\n"); status.append("uiMode:" + cfg.densityDpi + "\n"); txtResult.setText(status.toString()); } }
3.重寫onConfigurationChanged響應系統設定更改
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.btncahange); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Configuration config = getResources().getConfiguration(); //如果是橫屏的話切換成豎屏 if(config.orientation == Configuration.ORIENTATION_LANDSCAPE) { MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } //如果豎屏的話切換成橫屏 if(config.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(MainActivity.this, "系統螢幕方向發生改變 \n 修改後的方向為" + screen, Toast.LENGTH_SHORT).show(); } } 另外,還需要在AndroidManifest.xml新增下述內容: 許可權: < uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> 在< activity標籤中新增:android:configChanges="orientation" 將targetSdkVersion改為12以上的,12也可以