Android 響應(yīng)系統(tǒng)設(shè)置的事件(Configuration類(lèi))

2023-03-31 13:44 更新

本節(jié)引言:

本節(jié)給大家介紹的Configuration類(lèi)是用來(lái)描述手機(jī)設(shè)備的配置信息的,比如屏幕方向, 觸摸屏的觸摸方式等,相信定制過(guò)ROM的朋友都應(yīng)該知道我們可以在: frameworks/base/core/java/android/content/res/Configuration.java 找到這個(gè)類(lèi),然后改下相關(guān)設(shè)置,比如調(diào)整默認(rèn)字體的大?。∮信d趣可自行了解! 本節(jié)講解的Configuration類(lèi)在我們Android開(kāi)發(fā)中的使用~ API文檔:Configuration


1.Configuration給我們提供的方法列表

  • densityDpi:屏幕密度
  • fontScale:當(dāng)前用戶(hù)設(shè)置的字體的縮放因子
  • hardKeyboardHidden:判斷硬鍵盤(pán)是否可見(jiàn),有兩個(gè)可選值:HARDKEYBOARDHIDDEN_NO,HARDKEYBOARDHIDDEN_YES,分別是十六進(jìn)制的0和1
  • keyboard:獲取當(dāng)前關(guān)聯(lián)額鍵盤(pán)類(lèi)型:該屬性的返回值:KEYBOARD_12KEY(只有12個(gè)鍵的小鍵盤(pán))、KEYBOARD_NOKEYS、KEYBOARD_QWERTY(普通鍵盤(pán))
  • keyboardHidden:該屬性返回一個(gè)boolean值用于標(biāo)識(shí)當(dāng)前鍵盤(pán)是否可用。該屬性不僅會(huì)判斷系統(tǒng)的硬件鍵盤(pán),也會(huì)判斷系統(tǒng)的軟鍵盤(pán)(位于屏幕)。
  • locale:獲取用戶(hù)當(dāng)前的語(yǔ)言環(huán)境
  • mcc:獲取移動(dòng)信號(hào)的國(guó)家碼
  • mnc:獲取移動(dòng)信號(hào)的網(wǎng)絡(luò)碼 
    ps:國(guó)家代碼和網(wǎng)絡(luò)代碼共同確定當(dāng)前手機(jī)網(wǎng)絡(luò)運(yùn)營(yíng)商
  • navigation:判斷系統(tǒng)上方向?qū)Ш皆O(shè)備的類(lèi)型。該屬性的返回值:NAVIGATION_NONAV(無(wú)導(dǎo)航)、 NAVIGATION_DPAD(DPAD導(dǎo)航)NAVIGATION_TRACKBALL(軌跡球?qū)Ш剑AVIGATION_WHEEL(滾輪導(dǎo)航)
  • orientation:獲取系統(tǒng)屏幕的方向。該屬性的返回值:ORIENTATION_LANDSCAPE(橫向屏幕)、ORIENTATION_PORTRAIT(豎向屏幕)
  • screenHeightDp,screenWidthDp:屏幕可用高和寬,用dp表示
  • touchscreen:獲取系統(tǒng)觸摸屏的觸摸方式。該屬性的返回值:TOUCHSCREEN_NOTOUCH(無(wú)觸摸屏)、TOUCHSCREEN_STYLUS(觸摸筆式觸摸屏)、TOUCHSCREEN_FINGER(接收手指的觸摸屏)

2.寫(xiě)個(gè)簡(jiǎn)單例子測(cè)試下:

運(yùn)行截圖:

代碼實(shí)現(xiàn):

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();
        //①獲取系統(tǒng)的Configuration對(duì)象
        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.重寫(xiě)onConfigurationChanged響應(yīng)系統(tǒng)設(shè)置更改

該方法用于監(jiān)聽(tīng)系統(tǒng)設(shè)置的更改,是基于回調(diào)的時(shí)間處理方法,當(dāng)系統(tǒng)的設(shè)置發(fā)生改變時(shí)就會(huì)自動(dòng)觸發(fā); 但是要注意一點(diǎn),使用下面的方法監(jiān)控的話(huà),targetSdkVersion屬性最高只能設(shè)置為12,高于12的話(huà),該方法不會(huì)被激發(fā)!這里寫(xiě)個(gè)橫豎屏切換的例子給大家參考參考,其他的可自行谷歌~

代碼示例:簡(jiǎn)單的一個(gè)按鈕,點(diǎn)擊后切換橫豎屏,然后Toast提示

運(yùn)行效果圖:

實(shí)現(xiàn)代碼:

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();  
                //如果是橫屏的話(huà)切換成豎屏  
                if(config.orientation == Configuration.ORIENTATION_LANDSCAPE)  
                {  
                    MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
                }  
                //如果豎屏的話(huà)切換成橫屏  
                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, "系統(tǒng)屏幕方向發(fā)生改變 \n 修改后的方向?yàn)? + screen, Toast.LENGTH_SHORT).show();  
    }  
}  

另外,還需要在AndroidManifest.xml添加下述內(nèi)容:

權(quán)限: ** 在< activity標(biāo)簽中添加:android:configChanges="orientation"** 將targetSdkVersion改為12以上的,12也可以


本節(jié)小結(jié):

本節(jié)給大家講解了:Configuration類(lèi)以及onConfigurationChanged響應(yīng)系統(tǒng)設(shè)置更改,有個(gè)大概了解即可 后續(xù)用到我們?cè)倮^續(xù)深入~

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)