Android | 如何在程序中改变屏幕方向后仍保持屏幕方向不变?

7
我有一个视频播放器,用户可以通过手动更改方向、旋转设备和按按钮来改变方向。当我点击按钮时,方向会改变为横向,但现在方向被锁定了,用户不能通过旋转设备回到纵向。我尝试过以下方法:
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

并且这个:

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);

但似乎这些都不起作用。那么,我如何能够始终保持方向解锁,用户可以通过点击一个按钮切换方向并保持方向解锁?


假设我的设备处于纵向的竖屏模式,我点击按钮后,屏幕方向会在程序上切换为横屏模式。如果你想要取消切换,它应该立即恢复到纵向竖屏,因为传感器会检测到此时是“竖屏”模式,而横屏模式是被强制执行的。我有遗漏什么吗? - lelloman
你可以尝试使用activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 但是如果传感器会立即改变方向,那么按钮的意义在哪里呢?只有当你想将方向设置为与传感器方向不同的方向时,按钮才有意义。也许按第二次按钮以解锁并恢复到传感器状态? - samgak
如果您在观看YouTube视频时,即使我通过按钮单击更改了方向,并且设备处于方向模式下,设备也不会自动旋转回来。 - Rahul Gupta
哦,我明白了,现在有意义了。 - lelloman
你能提供传感器的代码吗?如何使用传感器检测当前位置? - Rahul Gupta
显示剩余2条评论
4个回答

2

在更改所需条件后,请尝试此操作。

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

2

我通过一个按钮更改方向后,在处理程序中将方向更改为未指定,以确保方向已更改。这是我的代码:


在按下按钮之后:
更改方向
处理程序中:
将方向更改为未指定以确认方向已更改。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT);
    new Handler().postDelayed(new Runnable() {
        public void run() {
            // make screen orientation unspecified (sensor change it 
            //according to user action)
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
        }
    }, 3000);

0
在应用程序部分中添加 android:screenOrientation="portrait"。
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".App"
              android:label="@string/app_name"
              android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>

0

我也需要在打开一个活动时将其方向更改为180,然后让用户旋转回竖屏并锁定它。

我只是在onCreate内添加了这些行:

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED

在清单文件中锁定了竖屏模式的活动。

<activity
        android:name=".ui.GalleryActivity"
        android:launchMode="singleTask"
        android:screenOrientation="sensorPortrait"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接