Android模拟器中,快捷键"Ctrl+F11/F12"可以实现转屏 一个很简单的Activity如下: package cn.sohu.com; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class TestActivityActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { Log.i("TAG", "onCreate()方法被调用"); super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override protected void onStart() { Log.i("TAG", "onStart()方法被调用"); super.onStart(); } @Override protected void onRestart() { Log.i("TAG", "onRestart()方法被调用"); super.onRestart(); } @Override protected void onResume() { Log.i("TAG", "onResume()方法被调用"); super.onResume(); } @Override protected void onSaveInstanceState(Bundle outState) { Log.i("TAG", "onSaveInstanceState()方法被调用"); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { Log.i("TAG", "onRestoreInstanceState()方法被调用"); super.onRestoreInstanceState(savedInstanceState); } @Override protected void onPause() { Log.i("TAG", "onPause()方法被调用"); super.onPause(); } @Override protected void onStop() { Log.i("TAG", "onStop()方法被调用"); super.onStop(); } @Override protected void onDestroy() { Log.i("TAG", "onDestroy()方法被调用"); super.onDestroy(); } }
在我们进行切换屏幕的时候,依次调用了如下的方法:
05-10 12:01:16.831: I/TAG(304): onSaveInstanceState()方法被调用
05-10 12:01:16.831: I/TAG(304): onPause()方法被调用
05-10 12:01:16.831: I/TAG(304): onStop()方法被调用
05-10 12:01:16.831: I/TAG(304): onDestroy()方法被调用
05-10 12:01:16.850: I/TAG(304): onCreate()方法被调用
05-10 12:01:16.931: I/TAG(304): onStart()方法被调用
05-10 12:01:16.931: I/TAG(304): onRestoreInstanceState()方法被调用
05-10 12:01:16.931: I/TAG(304): onResume()方法被调用
由此可见:Activity在屏幕切换时先保护现场然后被摧毁,切换后重建此时恢复现场
现在我们要求,在横竖屏幕切换的时候,不销毁和重建Activity
第一步: 在AndroidManifest.xml中的<activity/>添加属性 android:configChanges="orientation|keyboardHidden"
第二步: 重写activity的生命周期方法 onConfigurationChanged(Configuration newConfig)即:
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
textView.setText("现在为横屏幕");
}else{
textView.setText("现在为竖屏幕");
}
}
这样即可达到目的.同理我们可以在此方法中为屏幕的不同方向设置不同的布局文件!!!!!!!!!
即:在res目录下建立layout-land和layout-port目录,相应的layout文件不变且把main.xml复制到这两个目录下面.
layout-land是横屏的layout,layout-port是竖屏的layout