程序可以调用 Activity 的如下方法来获取系统的 Configuration 对象:
Configuration configuration = getResources().getConfiguration();
我们可以通过 Configuration 对象获取如下的系统配置信息:
分类符 | 描述 |
---|---|
public float fontScale | 获取当前用户设置的字体的缩放因子 |
public int keyboard | 获取当前设备所关联的键盘类型。该属性可能返回如下值:KEYBOARD_NOKEYS、KEYBOARD_QWERTY(普通电脑键盘)、KEYBOARD_12KEY(只有12键的小键盘) |
public int keyboardHidden | 该属性返回一个 boolean 值用于标识当前键盘是否可用。同时判断硬件键盘和软键盘。只有两个键盘都不可用的时候才会返回 KEYBOARDHIDDEN_YES,否则返回KEYBOARDHIDDEN_NO。 |
public int mcc | 获取移动信号的国家码 |
public int mnc | 获取移动信号的网络码 |
public int navigation | 判断系统上方向导航设备的类型。取值:NAVIGATION_NONAV(无导航)、NAVIGATION_DPAD(DPAD 导航)、NAVIGATION_TRACKBALL(轨迹球导航)、NAVIGATION_WHEEL(滚轮导航)等属性值。 |
public int orientation | 获取系统屏幕的方向,该属性可能返回 ORIENTATION_PORTRAIT(竖向)、ORIENTATION_LANDSCAPE(横向)。 |
public int touchscreen | 获取系统触摸屏的触摸方式。该属性可能返回 TOUCHSCREEN_NOTOUCH(无触摸屏)、TOUCHSCREEN_FINGER(触摸屏) |
监听屏幕方向改变###
我们可以通过在 Activity 中重写如下方法,用于监听系统设置改变,下面以监听屏幕方向改变为例:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
String screen = newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE
? "landscape" : "portrait";
Toast.makeText(this, "Current orientation: " + screen, Toast.LENGTH_LONG).show();
}
同时,需要在 AndroidManifest.xml 中的 Activity 的属性中加入如下的属性:
android:configChanges="orientation|screenSize"
在 API 12 之后,如果要监测方向改变,screenSize 属性是必须的。
本例中,完整的 AndroidManifest.xml 代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.toby.personal.testlistview">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:hardwareAccelerated="false"
android:largeHeap="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
参考文献:《疯狂Android讲义(第2版)》
参考链接:http://stackoverflow.com/questions/5620033/onconfigurationchanged-not-getting-called