1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Android屏幕旋转-横屏竖屏切换

Android屏幕旋转-横屏竖屏切换

时间:2018-07-29 09:31:48

相关推荐

Android屏幕旋转-横屏竖屏切换

实现屏幕自动/手动旋转的方式有两种:

一种是在工程的代码中定义,这种方式在横竖屏切换时执行的操作是:销毁当前Activity–根据新的屏幕尺寸重建Activity。如果不进行数据存储的操作,在切换的过程中Activity中的数据会丢失。另一种是在工程的AndroidManifest.xml中定义,这种定义的方式在某些情况下可以实现“不销毁需要横竖屏的Activity”,因为这种方式不会销毁Activity后重建Activity,因此Activity的数据不会丢失。

方式一:代码中定义

在需要横屏的Activity中的onCreate方法内添加如下语句,并且要求该语句位于onCreate方法内setContentView(**)语句之前。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

上条语句中,常数SCREEN_ORIENTATION_FULL_SENSOR是决定屏幕如何旋转的参数。总结所有的参数对应的功能:

由于该方式下横/竖屏切换时,对应的Activity的数据会丢失,可以在对应的Activity中重写如下两个方法,来保证数据不丢失:

@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);//横竖屏切换前调用,保存用户想要保存的数据,以下是样例outState.putString("name","yoosir"); outState.putInt("age",24); outState.putBoolean("handsome",true);}@Overrideprotected 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中定义

在AndroidManifest.xml中对应的Activity属性定义中配置android:configChanges和screenOrientation。参考的文章中在android:configChanges的配置说的很清楚,我直接把结论贴出来:

android:configChanges="orientation|keyboardHidden|screenSize"

配置configChanges为以上配置时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。Activity中的数据不会被销毁。

不配置configChanges或配置configChanges为非以上配置时,切屏会重新调用当前Activity的各个生命周期。Activity中的数据会被销毁

给出示例代码如下:

<activity android:name=".com.cdsn.SearchActivity"... ...android:screenOrientation="sensor"android:configChanges="keyboardHidden|orientation|screenSize"/>

上述代码中的android:screenOrientation所有可能的参数配置如下:取自文章。

上述代码中的android:configChanges所有可能的参数配置如下:取自文章。

配置了以上属性之后,进行横竖屏切换的Activity的数据不会丢失,如果想根据不同的屏幕方向来展示不同UI或做不同的事,需要在该Activity中重写以下方法:

@Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);// 在这里添加屏幕切换后的操作}

番外

我按照上述方法,根据重力传感器实现了屏幕旋转,虽然可以做到屏幕随重力传感器切换,但是发现:无论手机设置中“屏幕旋转”或“方向锁定”是开是关,App内的Activity都会随着手机的横竖方向切换横竖屏。我想要实现的是当打开“屏幕旋转”时,App内的Activity跟随重力感应器;当关闭“屏幕旋转”时,App内的Activity固定为默认方向。如何做到关闭重力传感器时,App亦关闭屏幕自动旋转?

android:screenOrientation="sensor"

改上述代码为以下代码

android:screenOrientation="user"

意即:当参数为sensor时,无论是否关闭“屏幕旋转”设置,App内的特定Activity都会根据重力传感器改变横竖屏。

当参数为user时,当“屏幕旋转”开启,则特定Activity根据根据重力传感器改变横竖屏;当“屏幕旋转”关闭,则特定Activity会固定位默认方向(一般为正面竖屏)。

参考文章

/p/dbc7e81aead2

/u010005281/article/details/79531474

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。