android - 安卓怎么固定屏幕两个方向旋转?

【字号: 日期:2022-12-16浏览:23作者:雯心

问题描述

我现在做的应用屏幕左侧旋转的时候 程序有问题,会崩溃,所以想只允许用户可以向左侧和上方两个方向上旋转屏幕,想问一下大家有知道怎么实现吗?网上查到的资料都是怎么去固定一个方向的,没有找到这方面资料,希望了解的朋友告知一声,谢谢!

问题解答

回答1:你需要了解以下几点1.设置

<activity>节点的android:screenOrientation属性可以完成该项任务,示例代码如下:

<activity android:name='.EX01' android:label='@string/app_name' android:screenOrientation='portrait'> //值为portrait时强制为竖屏, 值为landscape时强制为横屏</activity>2.强制开启屏幕旋转效果

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

3.监听屏幕旋转

①调用当前的Activity的onSaveInstanceState(Bundle outState)去保存应用中的一些数据,你可以重写这个方法

②然后调用onDestroy()销毁当前的Activity

③重新调用onCreate()或onRestoreInstanceState()方法去重新创建一个Activity(也就是说,程序会重新将onCreate中的代码在执行一遍)

除此之外,还要说明的一点是onSaveInstanceState(Bundle outState)到底怎么用:当屏幕发生旋转的时候会调用这个方法,这里的参数Bundle,就是让我们来封装在屏幕 未旋转前时想要保存的数据的,之后调用onDestroy()销毁当前的Activity,最后重新调用onCreate(Bundle savedInstanceState),这时outState就会赋给savedInstanceState,这样的话,我们在onCreate中重新创建Activity的时候,可以用之前保存的数据来初始化重新创建的Activity,这很重要,因为一个应用程序在整个运行过程中,不论在横屏和竖屏,数据的变化都要有一致性,不能因为屏幕发生改变,就让用户从头开始重新操作一遍

除此之外,由于屏幕旋转时,一定会触发onSaveInstanceState(Bundle outState)方法,那么我们完全可以将这个方法作为屏幕旋转的监听器

下面就举一个例子:

*注意判断横屏和竖屏并不是简单的事,因为Android中规定,只有是完全竖和横才能够返回ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE、ActivityInfo.SCREEN_ORIENTATION_PORTRAIT 而这在实际中几乎无法存在这样的情况

这里是方法:

第一:权限声明:

<uses-permission Android:name='android.permission.CHANGE_CONFIGURATION'></uses-permission>

第二:声明activity要捕获的事件类型,

<activity android:name='.MainActivity' android:label='@string/app_name' android:configChanges='orientation|keyboard'> <intent-filter> <action android:name='android.intent.action.MAIN' /> <category android:name='android.intent.category.LAUNCHER' /> </intent-filter> </activity>

这里一定要声明Android:configChanges属性,该属性规定了我们可以在程序中捕获到的事件类型,多个事件类型用|分隔。

如果这里没有orientation,那么我们再程序中是无法捕获到屏幕改变的事件的。

第三:重写Activity中的onConfigurationChanged方法

/** * 屏幕旋转时调用此方法 */ @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); //newConfig.orientation获得当前屏幕状态是横向或者竖向 //Configuration.ORIENTATION_PORTRAIT 表示竖向 //Configuration.ORIENTATION_LANDSCAPE 表示横屏 if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){ Toast.makeText(MainActivity.this, '现在是竖屏', Toast.LENGTH_SHORT).show(); } if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){ Toast.makeText(MainActivity.this, '现在是横屏', Toast.LENGTH_SHORT).show(); } }

实在不会可以站内联系我,我可以帮你看一下,大家共同进步

回答2:

虽然没有直接回答我的问题,但是你说的这些内容我今天用到了,非常感谢。

相关文章: