A android:configChanges属性

android:configChanges属性,一般认为有以下几点:

1 不设置Activityandroid:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。

2 设置Activityandroid:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activityandroid:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。

4 但是,自从Android 3.2API 13),在设置Activityandroid:configChanges="orientation|keyboardHidden"后,还是一样 会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation" 你还必须设置"ScreenSize"

解决办法:

AndroidManifest.xml中设置android:configChanges="orientation|screenSize“

B ActivityConfigChanges属性

官方解释:通过设置这个属性可以使Activity捕捉设备状态变化,以下是可以被识别的内容:

CONFIG_FONT_SCALE
CONFIG_MCC
CONFIG_MNC
CONFIG_LOCALE
CONFIG_TOUCHSCREEN
CONFIG_KEYBOARD
CONFIG_NAVIGATION
CONFIG_ORIENTATION

设置方法:将下列字段用”local|navigation|orientation”

mcc:移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。

mnc:移动网号,在一个国家或者地区中,用于区分手机用户的服务商。

locale:用户所在地区发生变化。

touchscreen:The touchscreen has changed. (This should never normally happen.)

keyboard:键盘模式发生变化,例如:用户接入外部键盘输入

keyboardHidden:用户打开手机硬件键盘。

navigation: The navigation type has changed. (This should never normally happen.)

orientation:设备旋转,横向显示和竖向显示模式切换。

fontScale:全局字体大小缩放发生改变。

C 通过设置android:configChanges查看activity的生命周期的变化,看打印情况。

1 编写如下Android应用程序:

2 编写Android清单文件如下:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.itheima.kof97"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="19" />

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name="com.itheima.kof97.MainActivity"

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>

2 编写布局文件activity_main.xml

<RelativeLayout 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"

tools:context=".MainActivity" >

<Button

android:layout_centerHorizontal="true"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="click"

android:text="重拳"/>

<TextView

android:id="@+id/tv_blood"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_centerVertical="true"

android:text="100"/>

</RelativeLayout>

3 编写Activity,代码如下:

package com.itheima.kof97;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.TextView;

import android.widget.Toast;

/**

* 默认情况下横竖屏切换activity会销毁然后重新创建

* @author toto

*/

public class MainActivity extends Activity {

private TextView tv_blood;

private int blood = 100;

private static String TAG = "android:Config";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.i(TAG, "onCreate");

setContentView(R.layout.activity_main);

tv_blood = (TextView) findViewById(R.id.tv_blood);

}

public void click(View view) {

blood--;

tv_blood.setText("对方的生命值:" + blood);

if (blood < 0) {

Toast.makeText(this, "K.O.!", 1).show();

}

}

//被销毁的时候调用的方法

@Override

protected void onDestroy() {

Log.i(TAG, "onDestroy");

super.onDestroy();

}

//activity界面用户可见的时候调用的方法

@Override

protected void onStart() {

Log.i(TAG, "onStart");

super.onStart();

}

protected void onRestart() {

Log.i(TAG, "onRestart");

super.onRestart();

}

//activity界面用户不可见的时候调用的方法

protected void onStop() {

Log.i(TAG, "onStop");

super.onStop();

}

//界面开始获取到焦点对应的方法。 (界面按钮可以被点击,文本框可以输入内容)

protected void onResume() {

Log.i(TAG, "onResume");

super.onResume();

}

//界面失去焦点对应的方法(暂停)(按钮不可被点击,文本框不可输入内容,但是界面用户仍然能看见)

protected void onPause() {

Log.i(TAG, "onPause");

super.onPause();

}

}

Android的生命周期图:

activity不加android:configChanges="orientation|keyboardHidden|screenSize"的测试结果:

1):启动时输出:

说明:

A:onCreate:创建activity

B:onStart:activity界面用户可见的时候调用的方法。

C:onResume:界面开始获取焦点对应的方法。(界面按钮可以被点击,文本框可以输入内容)。

2:按返回箭头按钮直到不可见,调用的方法有:

说明:

AonPause界面失去焦点对应的方法(暂停)(按钮不可被点击,文本框不可输入内容,但是界面用户仍然能看见)。

B:onStop:activity界面用户不可见的时候调用的方法。

C:onDestory:被销毁的时候调用的方法。

3):按小房子的按钮让界面从可见到不可见的过程:

说明:

这个过程只是让界面失去焦点,不可见,没有销毁activity

4):在(3)的基础上,再次点击应用程序打开打开界面过程,执行的操作如下:

说明:

onRestart:activity没有死的时候会直接调用这个方法。

onStart:activity可见。

onResume:获取到焦点。

点击重拳:

开始界面显示:

当手机旋转之后的效果如下:

现象:值又变成最开始的值了,也就是说没有保存上一个界面状态中的值。

4、修改AndroidManifest.xml文件,添加android:configChanges="orientation|keyboardHidden|screenSize"。后的效果如下:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.itheima.kof97"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="19" />

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:configChanges="orientation|keyboardHidden|screenSize"

android:name="com.itheima.kof97.MainActivity"

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>

运行程序,开始界面如下:

手机屏幕旋转之后的界面

这个现象说明,没有加android:configChanges="orientation|keyboardHidden|screenSize"时屏幕旋转会改变原有的参数的值,如果加了,屏幕状态中保存的值不会随着界面旋转而改变。

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. Android(安卓)Activity界面切换添加动画特效
  6. Android(安卓)拨号器的简单实现
  7. android实现字体闪烁动画的方法
  8. Android(安卓)Wifi模块分析(三)
  9. Android中dispatchDraw分析

随机推荐

  1. Android 所有版本区别总结
  2. Android 系统中WatchDog 日志分析
  3. android 应用程序数据共享shareuserid篇+
  4. Android系统编译环境变量的设置
  5. Android设置个性化Dialog小图标的方法
  6. Android(安卓)自定义 spinner (背景、字
  7. 菜鸟学Android开发系列之:初探Button和Tex
  8. 轻量级的 Android 应用开发集成环境 - An
  9. Android开发文档
  10. 关于Linearlayout中控件设置为其底部的问