Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android技術基礎 >> 3.6 響應系統設置的事件(Configuration類)

3.6 響應系統設置的事件(Configuration類)

編輯:Android技術基礎

本節引言:

本節給大家介紹的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(豎向屏幕)
  • screenHeightDpscreenWidthDp:屏幕可用高和寬,用dp表示
  • touchscreen:獲取系統觸摸屏的觸摸方式。該屬性的返回值:TOUCHSCREEN_NOTOUCH(無觸摸屏)、TOUCHSCREEN_STYLUS(觸摸筆式觸摸屏)、TOUCHSCREEN_FINGER(接收手指的觸摸屏)

2.寫個簡單例子測試下:

運行截圖:

代碼實現:

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響應系統設置更改

該方法用於監聽系統設置的更改,是基於回調的時間處理方法,當系統的設置發生改變時就會自動觸發; 但是要注意一點,使用下面的方法監控的話,targetSdkVersion屬性最高只能設置為12,高於12的話,該方法不會被激發!這裡寫個橫豎屏切換的例子給大家參考參考,其他的可自行谷歌~

代碼示例:簡單的一個按鈕,點擊後切換橫豎屏,然後Toast提示

運行效果圖:

實現代碼:

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也可以


本節小結:

本節給大家講解了:Configuration類以及onConfigurationChanged響應系統設置更改,有個大概了解即可 後續用到我們再繼續深入~

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved