【Android 清单文件下的 Activity各种配置详解】

<activity
            android:name=".SecondActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="第二个活动"
            android:screenOrientation="portrait" />

先说 android:launchMode 属性:

这篇博客对该属性说的比较清楚,请点击这里。

android:screenOrientation 属性

Android默认就是这个属性,android:screenOrientation=”unspecified”
这是一个默认值,由系统选择显示方向,在不同的设备上可能结果不太一样.
android:screenOrientation=”landscape” 横向屏幕
android:screenOrientation=”portrait” 竖向屏幕
android:screenOrientation=”user” 用户当前首选方向
android:screenOrientation=”behind” 与在活动(Activity)堆栈下的Activity方向相同
android:screenOrientation=”sensor” 根据物理方向传感器 来确定方向,比如有的游戏既支持竖屏也支持横屏,取决于用户手持方向.
android:screenOrientation=”nosensor” 不随 物理方向传感器确定方向,该传感器呗忽略,所以当用户转动设备,显示不会跟随改变,除了这个区别. 这个怎么理解呢? 其实可以理解成系统关闭重力感应.

或者在代码这样设置也可以:

@Override
    protected void onResume() {
        /**
         * 设置为横屏
         */
        if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        super.onResume(); //注意在super.onResume()之前

    }

android:configChanges 属性

周所周知,在Android横竖屏切换的时候,活动的生命周期是重新再执行一遍的。未避免这个问题,我们可以这样处理的:

在android 4.0 以上,必须要加上screenSize,也就是说android 4.0以后的版本必须这样配置:

android:configChanges="keyboardHidden|orientation|screenSize"

在配置了这个属性后,android:configChanges 属性就会捕获“屏幕方向”的变化,当捕获到这些变化后会调用Activity的onConfigurationChanged()方法。这样横竖屏切换时,活动的生命周期也不会重新再执行一遍啦。我们也可以在重写的onConfigurationChanged()方法做相应处理。

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
       /* if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            System.out.println("SecondActivitydd.onConfigurationChanged 横屏");
        } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            System.out.println("SecondActivitydd.onConfigurationChanged 竖屏");
        }*/
        switch (newConfig.orientation) { //屏幕的方向,和上面注释掉的代码效果一样
            case Configuration.ORIENTATION_PORTRAIT://竖屏
                System.out.println("SecondActivitydd.onConfigurationChanged 竖屏");
                break;
            case Configuration.ORIENTATION_LANDSCAPE://横屏
                System.out.println("SecondActivitydd.onConfigurationChanged 横屏");
                break;
        }



    }

相应参数说明:
在Activity中添加了android:configChanges属性,在当所指定属性(Configuration Changes)发生改变时,通知程序调用onConfigurationChanged()函数。

设置方法:将下列字段用“|”符号分隔开,例如:“locale|navigation|orientation”

“mcc“ 移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。
“mnc“ 移动网号,在一个国家或者地区中,用于区分手机用户的服务商。
“locale“ 所在地区发生变化。
“touchscreen“ 触摸屏已经改变。(这不应该常发生。)
“keyboard“ 键盘模式发生变化,例如:用户接入外部键盘输入。
“keyboardHidden“ 用户打开手机硬件键盘
“navigation“ 导航型发生了变化。(这不应该常发生。)
“orientation“ 设备旋转,横向显示和竖向显示模式切换。
“fontScale“ 全局字体大小缩放发生改变

exported 属性

android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。

总体来说它的主要作用是:是否支持其它应用调用当前组件。
默认值:如果包含有intent-filter 默认值为true; 没有intent-filter默认值为false。

android:enabled 属性

默认情况下,Android系统会自行实例化每一个应用程序的组件,包括Android四大组件,但如果我们需要自己完成这些事情的话,就需要使用android:enabled属性来限制Android系统的行为。这个属性表明Android系统是否可以被实例化应用程序组件,如果其值为true,则说明应用程序组件可以被Android系统自动实例化;如果为false,则说明实例化组件的工作需要手工完成。该属性的默认值为true。每一个组件都可以单独定义自己的enabled属性。如果这个属性定义在节点中,那么它会默认将每个组件的enabled属性设置为相同的值。如果每一个组件单独定义了这个属性,那么节点上定义的属性对此组件不再生效,就由自己的enabled属性决定。

android:allowBackup

它表示是否允许应用程序参与备份。如果将该属性设置为false,则即使备份整个系统,也不会执行这个应用程序的备份操作,而整个系统备份能导致所有应用程序数据通过ADB来保存。该属性必须是一个布尔值,或为true,或为false,其默认值为true。


参考博客:

关于ComponentName的使用

android:exported 属性详解

你可能感兴趣的:(【戏说,android,四大控件】)