转自:http://blog.csdn.net/bhduke/article/details/16863389
当手机横放时, 程序的activity会重启, 以适应新的设备配置. 假如是一个编辑页面, 重启的结果会导致所写内容的丢失, 如果已经写了很多内容, 那将是一件极其蛋疼的事情.
如果不想横屏时activity自动重启, 可以在AndroidManifest文件的<activity>中声明android:configChanges属性, 当指定的系统配置发生改变的时候, 系统将不会重启activity, 而是执行程序中的public void onConfigurationChanged(Configuration newConfig)函数, 这样就可以让我们自己处理横屏这件事.
下面给出一个小例子, 当手机横屏时, 执行onConfigurationChanged, 可以自己实验一下.
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.test"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="17" />
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity android:name="com.example.test.MainActivity"
- android:configChanges="keyboardHidden|orientation|screenSize" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name="com.example.test.Activity2" >
- </activity>
- </application>
- </manifest>
注意, API level 13以上的程序要加上screenSize这个值才能匹配横屏这件事. 否则还是自动重启.
- package com.example.test;
- import android.app.Activity;
- import android.content.res.Configuration;
- import android.os.Bundle;
-
- public class MainActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- System.out.println("onCreate");
- }
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- // newConfig就是横屏后的新配置,
- // newConfig.orientation保存着现在设备的方向.
- super.onConfigurationChanged(newConfig);
- System.out.println("changed");
- if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
- System.out.println("横向");
- } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
- System.out.println("竖向");
- }
- }
- }