当手机横放时, 程序的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("竖向");
}
}
}