Android屏幕旋转之横屏竖屏切换的实现屏幕旋转之横屏竖屏切换的实现
主要介绍了Android屏幕旋转之横屏竖屏切换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工
作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
刚实现了App内手机横/竖放置时,屏幕横/竖屏的切换。记录一下中间需要的关键信息和实现过程。
开门见山的说,实现屏幕自动/手动旋转的方式有两种:
一种是在工程的代码中定义,这种方式在横竖屏切换时执行的操作是:销毁当前Activity–根据新的屏幕尺寸重建Activity。如果
不进行数据存储的操作,在切换的过程中Activity中的数据会丢失。
另一种是在工程的AndroidManifest.xml中定义,这种定义的方式在某些情况下可以实现“不销毁需要横竖屏的Activity”,因为这
种方式不会销毁Activity后重建Activity,因此Activity的数据不会丢失。
接下来分别介绍这两种实现方式:
方式一:代码中定义方式一:代码中定义
在需要横屏的Activity中的onCreate方法内添加如下语句,并且要求该语句位于onCreate方法内setContentView(**)语句之前。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
上条语句中,常数SCREEN_ORIENTATION_FULL_SENSOR是决定屏幕如何旋转的参数。总结所有的参数对应的功能:
参数参数 功能功能
SCREEN_ORIENTATION_BEHIND 继承Activity堆栈中当前Activity下面的那个Activity的方向
SCREEN_ORIENTATION_FULL_SENSOR 由重力传感器决定0/90/180/270°
SCREEN_ORIENTATION_FULL_USER
SCREEN_ORIENTATION_LANDSCAPE 始终横屏
SCREEN_ORIENTATION_PORTRAIT 始终竖屏
SCREEN_ORIENTATION_LOCKED 锁定屏幕方向
SCREEN_ORIENTATION_NOSENSOR 关闭重力传感器对横/竖屏的影响
SCREEN_ORIENTATION_REVERSE_LANDSCAPE 另一个方向的横屏
SCREEN_ORIENTATION_REVERSE_PORTRAIT 另一个方向的竖屏(倒拿手机)
SCREEN_ORIENTATION_SENSOR 重力传感器影响屏幕的方向0/90/270°
SCREEN_ORIENTATION_SENSOR_LANDSCAPE 始终横屏,由重力传感器决定是哪个方向的横屏
SCREEN_ORIENTATION_SENSOR_PORTRAIT 始终竖屏,由重力传感器决定是哪个方向的竖屏
SCREEN_ORIENTATION_UNSPECIFIED 不指定方向,使用默认方向
SCREEN_ORIENTATION_USER 由用户和重力传感器共同决定,详见文本末端
SCREEN_ORIENTATION_USER_LANDSCAPE 用户和重力传感器共同决定是哪个方向的横屏
SCREEN_ORIENTATION_USER_PORTRAIT 用户和重力传感器共同决定是哪个方向的竖屏
UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW 当屏幕较窄时导航栏有一部分会显示在底部
由于该方式下横/竖屏切换时,对应的Activity的数据会丢失,可以在对应的Activity中重写如下两个方法,来保证数据不丢失:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//横竖屏切换前调用,保存用户想要保存的数据,以下是样例
outState.putString("name","yoosir");
outState.putInt("age",24);
outState.putBoolean("handsome",true);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// 屏幕切换完毕后调用用户存储的数据,以下为样例:
if(savedInstanceState != null) {
int age = savedInstanceState.getInt("age");
String name = savedInstanceState.getString("name");
boolean isHandsome = savedInstanceState.getBoolean("handsome");
}
}
方式二:在方式二:在AndroidManifest.xml中定义中定义
评论0