Android屏幕方向:纵向无效

时间:2015-12-24 09:47:47

标签: android layout screen-orientation

我希望我的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>

无法正常工作,即使手机屏幕旋转已关闭,仍然可以旋转。

接下来我尝试了代码。从manifest中删除了添加的人员,并在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>

结果是:它不允许我旋转,但当我这样做时,整个应用程序冻结,并且在我将其旋转回移动之前无法执行任何操作。

帮助我们!

6 个答案:

答案 0 :(得分:0)

添加android:screenOrientation="portrait"可以简单地做到这一点:

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

答案 1 :(得分:0)

<强>第一

  

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

然后移除

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

我不知道你为什么要用它。尝试删除它并检查

答案 2 :(得分:0)

试试这个。

PORTRAIT YourActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

LANDSCAPE YourActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

答案 3 :(得分: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>

答案 4 :(得分:0)

当您声明横向或纵向值之一时,它是 被认为是定向的硬性要求 活动运行。因此,您声明的值将启用过滤 服务(例如Google Play),因此您的应用仅适用于 支持活动所需方向的设备。对于 例如,如果您声明“ landscape”,“ reverseLandscape”或 “ sensorLandscape”,那么您的应用程序仅对 支持横向定位的设备。但是,您还应该 明确声明您的应用程序需要纵向或纵向 与元素的横向。例如, 。这个 纯粹是Google Play(和其他 支持它的服务),而平台本身无法控制 当设备仅支持特定功能时是否可以安装您的应用 方向。

如果您想忽略此错误,请执行以下操作:

    <activity
        android:name="YourActivity"
        ...
        android:screenOrientation="portrait"
        tools:ignore="LockedOrientationActivity">

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

答案 5 :(得分:0)

尽管对于某些人来说可能并不明显;如果您使用的是远程设备(使用wifi),则需要卸载该应用程序,然后通过电线将其重新安装。希望这能解决您的问题。