回應系統設定的事件(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(垂直螢幕)
  • screenHeightDpscreenWidthDp:螢幕可用高和寬,用dp表示
  • touchscreen:取得系統觸控螢幕的觸控方式。此屬性的回傳值:TOUCHSCREEN_NOTOUCH(無觸控螢幕)、TOUCHSCREEN_STYLUS(觸控筆觸控螢幕)、TOUCHSCREEN_FINGER(接收手指的觸控螢幕)

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

運行截圖:

1.png

程式碼實作:

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 + );
    }
#}

#

3.重寫onConfigurationChanged回應系統設定變更

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

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

執行效果圖:

2.jpg3.jpg

實作程式碼:

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新增下述內容:

權限:
< uses-permission android:name ="android.permission.CHANGE_CONFIGURATION" />

在< activity標籤中加入:android:configChanges="orientation"將targetSdkVersion改為12以上的,12也可以

本節小結:

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