Android Configuration 简介及监听屏幕方向改变

程序可以调用 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

    原文作者:赵者也
    原文地址: https://www.jianshu.com/p/f633c93a3f90
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞