Android屏幕方向:竖屏无法使用

3

我希望我的Activity只在纵向模式下运行,所以我尝试了不同的方法,但没有一种方法有效... 以下是尝试过的方法:

清单文件:

<application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait"
            android:configChanges="keyboardHidden|orientation"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="intent.to.front" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

无效,即使我的手机屏幕旋转关闭了,仍然可以旋转。

接下来我尝试了从代码上解决。从清单中移除了添加的staff,并在MainActivity类中编写了以下内容:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        Utilities.setLocale(getApplicationContext());
        setContentView(R.layout.activity_main);

这是我的布局。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:fitsSystemWindows="true" tools:openDrawer="start">

    <include layout="@layout/app_bar_main" android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.design.widget.NavigationView android:id="@+id/nav_view"
        android:layout_width="wrap_content" android:layout_height="match_parent"
        app:itemIconTint="@color/grey"
        android:layout_gravity="start" android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

结果是:它不让我旋转,但当我这样做时,整个应用程序会冻结,直到我将其旋转回竖屏为止。

帮帮我!


1
我只是使用了相同的android:screenOrientation="portrait"来使我的应用程序仅在纵向模式下运行... 没有其他魔法.. 但我已经为每个活动指定了这个。 - Mohan Rex
好的,我发现android:screenOrientation="portrait"和configChanges适用于其他所有活动,但不适用于MainActivity。 - Nikoloz14
6个回答

0

只需添加android:screenOrientation="portrait"即可轻松解决问题:

<activity android:name=".YourActivity"
    android:configChanges="orientation"
    android:screenOrientation="portrait"/>

3
我之前试过了,但仍然不行。我不知道为什么。 - Nikoloz14

0

首先

检查您的主题样式,如果有屏幕方向的代码,请将其移除。

然后移除

<intent-filter>
    <action android:name="intent.to.front" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

我不知道你为什么要使用这个。尝试将其删除并检查。


<style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> - Nikoloz14
为什么你要使用其他的意图过滤器? - johnrao07
我真的不记得了,抱歉。但是我尝试过删除它,仍然没有帮助。 - Nikoloz14
好的,尝试在您的主题样式中添加 <item name="android:screenOrientation">portrait</item>。 - johnrao07
2
我将主活动代码注释掉了,然后它运行了。我猜那里面有什么问题,虽然它太大了,无法在这里发布,但我希望能找到它。感谢大家的帮助! - Nikoloz14

0

当你使用:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

这个命令会忽略清单文件中的所有方向设置,即使屏幕旋转被关闭,它也会旋转。

您必须先从onCreate方法中删除此命令,然后将其写入您的清单文件,它就可以正常工作:

   <activity
        android:name=".MainActivity"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

哥们,你没好好看说明啊。那是我尝试的第二个方法了,就像我说的,我从清单文件中删除了添加的行。在此之前,我尝试过这个,甚至没有添加代码:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 到主活动类。有些奇怪的事情正在发生。 - Nikoloz14

0

试试这个。

竖屏 YourActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

横屏 YourActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);


尝试在 setRequestedOrientation 之前调用 setContentView。 - Quang Doan
你不能发布Logcat。 - Quang Doan

0
当您声明其中一个横向或纵向值时,它被视为活动运行所需的方向的硬性要求。因此,您声明的值使得像Google Play这样的服务可以进行过滤,以便您的应用程序仅在支持您活动所需方向的设备上可用。例如,如果您声明“landscape”、“reverseLandscape”或“sensorLandscape”,那么您的应用程序将仅在支持横向方向的设备上可用。但是,您还应该明确声明您的应用程序需要纵向或横向方向,使用元素。例如:或。这纯粹是由Google Play(和其他支持它的服务)提供的过滤行为,平台本身不控制当设备仅支持某些方向时是否可以安装您的应用程序。
如果您想忽略此错误,请执行以下操作:
    <activity
        android:name="YourActivity"
        ...
        android:screenOrientation="portrait"
        tools:ignore="LockedOrientationActivity">

您可以在this页面中读取活动属性


-1

虽然对于一些人来说可能不太明显,但如果您正在使用远程设备(使用wifi),则需要卸载该应用程序,然后通过有线方式重新安装它。希望这可以解决您的问题。


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