您好,登錄后才能下訂單哦!
Configuration類用于描述手機(jī)設(shè)備上的配置信息。
通過調(diào)用Activity的如下方法來獲取系統(tǒng)的Configuration對象。
Configuration cfg = getResources().getConfiguration();
該對象提供了如下常用屬性來獲取系統(tǒng)的配置信息。
public float fontScale:獲取當(dāng)前用戶設(shè)置的字體的縮放因子。
public int keyboard:獲取當(dāng)前設(shè)備所關(guān)聯(lián)的鍵盤類型。該屬性可能返回如下值:
KEYBOARD_NOKEYS、KEYBOARD_QWERTY普通電腦鍵盤、KEYBOARD_12KEY(只有12個建的小鍵盤)。
public int keyboardHidden:該屬性返回一個boolean值用于標(biāo)識當(dāng)前鍵盤是否可用。該屬性不僅會判斷系統(tǒng)地硬件鍵盤,也會判斷系統(tǒng)的軟鍵盤(位于屏幕上)。如果該系統(tǒng)的硬件鍵盤不可用,但軟鍵盤可用,該屬性也會返回KEYBOARDHIDDEN_NO,只有當(dāng)兩個鍵盤都不可用時才會返回KEYBOARDHIDDEN_YES.
public Locale locale:獲取用戶當(dāng)前的Locale。
public int mcc:獲取移動信號的國家碼。
public int mnc:獲取移動信號的網(wǎng)絡(luò)碼。
public int navigation:判斷系統(tǒng)上方向?qū)Ш皆O(shè)備的類型。該屬性可能返回如NAVIGATION_NONAY(無導(dǎo)航)、NAVIGATION_DPAD(DPAD導(dǎo)航)、NAVIGATION_TRACKBALL(軌跡球?qū)Ш?、NAVIGATION_WHEEL(滾輪導(dǎo)航)等屬性值。
public int orientation:獲取系統(tǒng)屏幕的方向,該屬性可能返回ORIENTATION_LANDSCAPE(橫向屏幕)、ORIENTATION_PORTRAIT(豎向屏幕)、ORIENTATION_SQUARE(方形屏幕)等屬性值。
public int touchscreen:獲取系統(tǒng)觸摸屏的觸摸方式。該屬性可能返回TOUCHSC_REEN_NOTOUCH(無觸摸屏)、TOUCHSCREEN_STYLUS(觸摸筆式的觸摸屏)、TOUCHSCREEN_FINGER(接受手指的觸摸屏)。
實(shí)例:獲取系統(tǒng)設(shè)備的狀態(tài)
MainActivity.java
package com.example.configurationtest; public class MainActivity extends Activity { EditText ori; EditText navigation; EditText touch; EditText mnc; Button bn; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 獲取應(yīng)用界面中的界面組件 ori = (EditText) findViewById(R.id.ori); navigation = (EditText) findViewById(R.id.navigation); touch = (EditText) findViewById(R.id.touch); mnc = (EditText) findViewById(R.id.mnc); bn = (Button) findViewById(R.id.bn); bn.setOnClickListener(new OnClickListener() { // 為按鈕綁定事件監(jiān)聽器 public void onClick(View v) { // 獲取系統(tǒng)的Configuration對象 Configuration cfg = getResources().getConfiguration(); String screen = cfg.orientation == Configuration.ORIENTATION_LANDSCAPE ? "橫向屏幕" : "豎向屏幕"; String mncCode = cfg.mnc + ""; String naviName = cfg.orientation == Configuration.NAVIGATION_NONAV ? "沒有方向控制" : cfg.orientation == Configuration.NAVIGATION_WHEEL ? "滾輪方向控制" : cfg.orientation == Configuration.NAVIGATION_DPAD ? "方向鍵控制方向" : "軌跡球控制方向"; String touchName = cfg.touchscreen == Configuration.TOUCHSCREEN_NOTOUCH ? "無觸摸屏" : "支持觸摸屏"; ori.setText(screen); mnc.setText(mncCode); navigation.setText(naviName); touch.setText(touchName); } }); } }
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/ori" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/navigation" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/touch" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/mnc" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/bn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="獲取系統(tǒng)設(shè)備狀態(tài)" /> </LinearLayout>
如果系統(tǒng)需要監(jiān)聽系統(tǒng)設(shè)置的更改,則可以考慮重寫Activity的 onConfigurationChanged(Configuration newConfig)方法,該方法是一個基于回調(diào)的事件處理方法:當(dāng)系統(tǒng)設(shè)置發(fā)生改變時,該方法會被自動觸發(fā)。
實(shí)例:重寫onConfigurationChanged響應(yīng)系統(tǒng)設(shè)置更改
MainActivity.java
package com.example.changecfg; public class MainActivity extends Activity { Button bn; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bn = (Button) findViewById(R.id.bn); bn.setOnClickListener(new OnClickListener() { // 為按鈕綁定事件監(jiān)聽器 public void onClick(View v) { // 獲取系統(tǒng)的Configuration對象 Configuration config = getResources().getConfiguration(); // 如果當(dāng)前是橫屏 if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 設(shè)為豎屏 MainActivity.this .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } // 如果當(dāng)前是豎屏 if (config.orientation == Configuration.ORIENTATION_PORTRAIT) { // 設(shè)為橫屏 MainActivity.this .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } } }); } // 重寫該方法,用于監(jiān)聽系統(tǒng)設(shè)置的更改,主要是監(jiān)控屏幕方向的更改 public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); String screen = newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ? "橫向屏幕" : "豎向屏幕"; Toast.makeText(this, "\n修改后的屏幕方向?yàn)? + screen, 1).show(); } }
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/bn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="更改屏幕方向" /> </LinearLayout>
為了讓Activity能監(jiān)聽屏幕方向的更改的時間,需要在配置改Activity時指定acdroid:configChanges屬性,該屬性支持的其中一種屬性值為orientation,指定Activity可以監(jiān)聽屏幕方向改變的事件。
android:targetSdkVersion="12"最高只能設(shè)為12,不然無法監(jiān)聽系統(tǒng)設(shè)置的更改。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.changecfg" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="12" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.changecfg.MainActivity" android:configChanges="orientation" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。