本文主要是介绍21 activity横竖屏切换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
项目清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.itheima.lifecycle"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:screenOrientation="portrait" // 固定方向(竖) 这种情况下 activity不摧毁 重构
android:configChanges="orientation|screenSize" // 横竖屏切换时 activity不摧毁 重构android:name="com.itheima.lifecycle.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
package com.itheima.lifecycle;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {// 创建
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate");
}
@Override
protected void onStart() {// 可见
super.onStart();
System.out.println("onStart");
}
@Override
protected void onResume() {// 获得焦点
super.onResume();
System.out.println("onResume");
}
@Override
protected void onPause() {// 失去焦点
super.onPause();
System.out.println("onPause");
}
@Override
protected void onStop() {// 不可见
super.onStop();
System.out.println("onStop");
}
@Override
protected void onDestroy() {// 销毁
super.onDestroy();
System.out.println("onDestroy");
}
@Override
protected void onRestart() {// 从不可见恢复可见
super.onRestart();
System.out.println("onRestart");
}
public void play(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file:///mnt/sdcard/1.mp3"), "audio/*");
startActivity(intent);
}
@Override
protected void onSaveInstanceState(Bundle bundle) {// 摧毁的时候会自动执行
super.onSaveInstanceState(bundle);
System.out.println("onSaveInstanceState");
bundle.putString("data", "摧毁时保存的数据");
}
@Override
protected void onRestoreInstanceState(Bundle bundle) {// 恢复的时候会自动执行
super.onRestoreInstanceState(bundle);
System.out.println("onRestoreInstanceState: " + bundle.getString("data"));
}
public void change(View v) {// 代码实现横竖屏幕
switch (getResources().getConfiguration().orientation) {// 获取屏幕方向
case Configuration.ORIENTATION_LANDSCAPE:// 横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 改为竖屏
break;
case Configuration.ORIENTATION_PORTRAIT:// 竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 改为横屏
break;
}
}
}
.默认情况下, 横竖屏切换时会摧毁Activity重构, 因为要进行屏幕适配.
可以使用onSaveInstanceState()保存数据, 用onRestoreInstanceState()恢复数据
onSaveInstanceState()在Activity失去焦点时(切换到后天)也会被调用, 如果Activity在后台被杀死了, 再次启动时会自动调用onRestoreInstanceState()
b.如果不需要屏幕适配, 那么可以通过定义属性控制Activity不摧毁重构
android:configChanges="orientation|screenSize"
这种情况下不执行任何生命周期方法, 也不会改变布局
c.固定Activity方向
android:screenOrientation="portrait"
在这种情况下, Activity不会摧毁重构, 也不会改变方向
d.相关代码
getResources().getConfiguration().orientation
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
这篇关于21 activity横竖屏切换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!