Android UI onConfigurationChanged使用
知识点:屏幕旋转 android:configChanges
如何保证在屏幕横竖屏旋转时,不重新执行onCreate等逻辑,直接保存数据恢复显示在页面
要声明由 Activity 处理配置变更,请在清单文件中编辑相应的<activity>
元素,以包含 android:configChanges
属性以及代表要处理的配置的值。android:configChanges
属性的文档中列出了该属性的可能值(最常用的值包括 "orientation"
和 "keyboardHidden"
,分别用于避免因屏幕方向
和可用键盘
改变而导致重启
)。您可以在该属性中声明多个配置值,方法是用管道 | 字符
分隔这些配置值
注意:从 Android 3.2(API 级别 13)
开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,在开发针对 API 级别 13 或更高版本(正如 minSdkVersion 和 targetSdkVersion 属性中所声明)的应用时,若要避免由于设备方向改变而导致运行时重启,则除了 “orientation” 值以外,您还必须添加 "screenSize"
值。 也就是说,您必须声明android:configChanges="orientation|screenSize"
。但是,如果您的应用面向 API 级别 12 或更低版本,则 Activity 始终会自行处理此配置变更(即便是在 Android 3.2 或更高版本的设备上运行,此配置变更也不会重启 Activity)。
贴2段代码大家自己去验证下
public class ConfigAct extends Activity {
public static final String TAG = "ConfigAct";
private String str = "0";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.config_act);
// 模拟数据初始化
str = "1";
Log.e(TAG, "onCreate:" + str);
}
@Override
protected void onStart() {
super.onStart();
// 模拟显示之后,数据发生改变
str = (new Date()).getTime() + "";
Log.e(TAG, "onStart:" + str);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.e(TAG, "onConfigurationChanged:" + str);
}
}
<activity android:name=".config.ConfigAct" android:configChanges="orientation|screenSize"/>