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