242

我在从 Android 8.0 Oreo java.lang.IllegalStateException 中的通讯录中检索联系人时遇到问题:只有全屏不透明活动可以请求方向

我正在尝试从电话通讯录中获取活动中的联系人,它非常适合棒棒糖、棉花糖、牛轧糖等,但它会给我这样的奥利奥错误,请帮助我。我的代码在下面。

演示代码:-

private void loadContacts() {
            contactAsync = new ContactLoaderAsync();
            contactAsync.execute();
        }

        private class ContactLoaderAsync extends AsyncTask<Void, Void, Void> {
            private Cursor numCursor;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                Uri numContacts = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
                String[] numProjection = new String[]{ContactsContract.CommonDataKinds.Phone.CONTACT_ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE};
                if (android.os.Build.VERSION.SDK_INT < 11) {
                    numCursor = InviteByContactActivity.this.managedQuery(numContacts, numProjection, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE ASC");
                } else {
                    CursorLoader cursorLoader = new CursorLoader(InviteByContactActivity.this, numContacts, numProjection, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE ASC");
                    numCursor = cursorLoader.loadInBackground();
                }

            }

            @Override
            protected Void doInBackground(Void... params) {
                if (numCursor.moveToFirst()) {
                    try {
                        final int contactIdIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
                        final int displayNameIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
                        final int numberIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                        final int typeIndex = numCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
                        String displayName, number, type;
                        do {
                            displayName = numCursor.getString(displayNameIndex);
                            number = numCursor.getString(numberIndex);
                            type = getContactTypeString(numCursor.getString(typeIndex), true);
                            final ContactModel contact = new ContactModel(displayName, type, number);
                            phoneNumber = number.replaceAll(" ", "").replaceAll("\\(", "").replaceAll("\\)", "").replaceAll("-", "");

                            if (phoneNumber != null || displayName != null) {
                                contacts.add(phoneNumber);
                                contactsName.add(displayName);
                                contactsChecked.add(false);

                                filterdNames.add(phoneNumber);
                                filterdContactNames.add(displayName);
                                filterdCheckedNames.add(false);
                            }
                        } while (numCursor.moveToNext());
                    } finally {
                        numCursor.close();
                    }
                }


                Collections.sort(contacts, new Comparator<String>() {
                    @Override
                    public int compare(String lhs, String rhs) {
                        return lhs.compareToIgnoreCase(rhs);
                    }
                });

                InviteByContactActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mContactAdapter.notifyDataSetChanged();
                    }
                });

                return null;
            }
        }

        private String getContactTypeString(String typeNum, boolean isPhone) {
            String type = PHONE_TYPES.get(typeNum);
            if (type == null)
                return "other";
            return type;
        }

        static HashMap<String, String> PHONE_TYPES = new HashMap<String, String>();

        static {
            PHONE_TYPES.put(ContactsContract.CommonDataKinds.Phone.TYPE_HOME + "", "home");
            PHONE_TYPES.put(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE + "", "mobile");
            PHONE_TYPES.put(ContactsContract.CommonDataKinds.Phone.TYPE_WORK + "", "work");
        }
}

错误日志:-

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example, PID: 6573
                                                             java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.Activity.InviteByContactActivity}: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
                                                              Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
4

35 回答 35

184

在 android Oreo (API 26) 中,您不能更改样式中具有以下行的 Activity 的方向

 <item name="android:windowIsTranslucent">true</item>

或者

 <item name="android:windowIsFloating">true</item>

你有几种方法可以解决这个问题:

1)您可以简单地删除上面的行(或将其设置为false)并且您的应用程序运行良好。

2) 或者您可以先从该活动的清单中删除以下行

android:screenOrientation="portrait"

然后您必须将此行添加到您的活动中(在 onCreate() 中)

'>=' 更改为 '!=' 感谢Entreco评论

    //android O fix bug orientation
    if (android.os.Build.VERSION.SDK_INT != Build.VERSION_CODES.O) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

3)styles.xml您可以在文件夹中创建新的values-v26并将其添加到您的style.xml. (感谢AbdelHady 的评论)

 <item name="android:windowIsTranslucent">false</item>
 <item name="android:windowIsFloating">false</item>
于 2018-06-13T08:22:25.707 回答
92

在 Android O 及更高版本中,当您设置时会发生此错误

 android:screenOrientation="portrait"

在清单中。

删除该行并使用

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

在你的活动中。

这将解决您的问题。

于 2018-01-03T07:05:50.560 回答
82

GoogleonCreate在 v27 之后在 Activity 的方法上抛出了这个异常,它们的含义是:如果一个 Activity 是半透明或浮动的,它的方向应该依赖于父(背景)Activity,不能自己决定。

即使您android:screenOrientation="portrait"从浮动或半透明 Activity 中移除但在其父(背景)Activity 上固定方向,它仍然由父固定,我已经测试过。

一种特殊情况:如果您在启动器 Activity 上设置半透明,则它没有父级(背景),因此始终与设备一起旋转。想要修复它,你必须采取另一种方式来替换<item name="android:windowIsTranslucent">true</item>样式。

于 2018-02-19T18:03:11.460 回答
72

当您的目标 sdk 为 28 时,问题似乎正在发生。因此,在尝试了许多选项后,终于成功了。

<activity
            android:name=".activities.FilterActivity"
            android:theme="@style/Transparent"
            android:windowSoftInputMode="stateHidden|adjustResize" />

风格:-

<style name="Transparent" parent="Theme.AppCompat.Light.NoActionBar">
     <item name="android:windowIsTranslucent">true</item>
     <item name="android:windowBackground">@android:color/transparent</item>
     <item name="android:windowIsFloating">true</item>
     <item name="android:windowContentOverlay">@null</item>
     <item name="android:windowNoTitle">true</item>
     <item name="android:backgroundDimEnabled">false</item>
 </style>

注意:api 28 需要 parent="Theme.AppCompat.Light.NoActionBar"。以前在 api 26 有其他东西。工作得很好,但在 28 岁时开始出现问题。希望它可以帮助这里的人。编辑:对于某些只能通过设置<item name="android:windowIsTranslucent">false</item> and <item name="android:windowIsFloating">false</item> 工作。可能取决于您实施解决方案的方式。在我的情况下,它通过将它们设置为 true 来工作。

于 2018-10-24T08:50:52.780 回答
33

如果使用全屏透明Activity,则无需在Activity上指定方向锁定。它将采用父活动的配置设置。因此,如果父活动在清单中有:

安卓:screenOrientation="人像"

您的半透明活动将具有相同的方向锁定:纵向。

于 2018-06-05T07:21:10.350 回答
29

我用android:screenOrientation="behind"而不是android:screenOrientation="portrait". 基本上,您创建了一个对话框(在一个活动中),并且对话框本身不能请求方向,它需要父活动来执行此操作(因为父在后台可见并且有自己的布局)。

“后面” 与活动堆栈中直接位于其下方的活动相同的方向。

于 2018-09-20T13:15:01.377 回答
21

唯一真正有效的解决方案:

改变:

<item name="android:windowIsTranslucent">true</item>

至:

<item name="android:windowIsTranslucent">false</item>

在样式.xml

但这可能会导致您的启动画面出现问题(启动时出现白屏)...在这种情况下,将以下行添加到您的 styles.xml:

 <item name="android:windowDisablePreview">true</item> 

就在 windowIsTranslucent 线的下方。

如果前面的提示不起作用,最后的机会:目标 SDK 26 而不是 27。

于 2018-05-31T08:02:46.510 回答
21

如果非要使用setRequestedOrientation(),只能牺牲Android 8.0上的windowIsTranslucent属性

values\styles.xml对于 api 级别 25- (<8.0)

<style name="Base.Theme.DesignDemo" parent="Base.Theme.AppCompat.Light">
        ...
        <item name="android:windowIsTranslucent">true</item>
        ...
    </style>

values-v26\styles.xml对于 api 级别 26 (=8.0)

<style name="Base.Theme.DesignDemo" parent="Base.Theme.AppCompat.Light">
    ...
    <!-- android 8.0(api26),Only fullscreen opaque activities can request orientation -->
    <item name="android:windowIsTranslucent">false</item>
    ...
</style>

values-v27\styles.xml对于 api 级别 27+ (>8.0)

<style name="Base.Theme.DesignDemo" parent="Base.Theme.AppCompat.Light">
    ...
    <item name="android:windowIsTranslucent">true</item>
    ...
</style>
于 2018-12-10T06:24:56.080 回答
16

很多人都给出了修复,所以我将谈谈问题的根源。

根据异常日志:</p>

Caused by: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
    at android.app.Activity.onCreate(Activity.java:1081)
    at android.support.v4.app.SupportActivity.onCreate(SupportActivity.java:66)
    at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:297)
    at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:84)
    at com.nut.blehunter.ui.DialogContainerActivity.onCreate(DialogContainerActivity.java:43)
    at android.app.Activity.performCreate(Activity.java:7372)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302) 
    at android.app.ActivityThread.-wrap12(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891) 
    at android.os.Handler.dispatchMessage(Handler.java:108) 
    at android.os.Looper.loop(Looper.java:166)

Activity.java 中触发异常的代码

    //Need to pay attention mActivityInfo.isFixedOrientation() and ActivityInfo.isTranslucentOrFloating(ta)
    if (getApplicationInfo().targetSdkVersion >= O_MR1 && mActivityInfo.isFixedOrientation()) {
        final TypedArray ta = obtainStyledAttributes(com.android.internal.R.styleable.Window);
        final boolean isTranslucentOrFloating = ActivityInfo.isTranslucentOrFloating(ta);
        ta.recycle();

        //Exception occurred
        if (isTranslucentOrFloating) {
            throw new IllegalStateException(
                    "Only fullscreen opaque activities can request orientation");
        }
    }

mActivityInfo.isFixedOrientation():</p>

        /**
        * Returns true if the activity's orientation is fixed.
        * @hide
        */
        public boolean isFixedOrientation() {
            return isFixedOrientationLandscape() || isFixedOrientationPortrait()
                    || screenOrientation == SCREEN_ORIENTATION_LOCKED;
        }
        /**
        * Returns true if the activity's orientation is fixed to portrait.
        * @hide
        */
        boolean isFixedOrientationPortrait() {
            return isFixedOrientationPortrait(screenOrientation);
        }

        /**
        * Returns true if the activity's orientation is fixed to portrait.
        * @hide
        */
        public static boolean isFixedOrientationPortrait(@ScreenOrientation int orientation) {
            return orientation == SCREEN_ORIENTATION_PORTRAIT
                    || orientation == SCREEN_ORIENTATION_SENSOR_PORTRAIT
                    || orientation == SCREEN_ORIENTATION_REVERSE_PORTRAIT
                    || orientation == SCREEN_ORIENTATION_USER_PORTRAIT;
        }

        /**
        * Determines whether the {@link Activity} is considered translucent or floating.
        * @hide
        */
        public static boolean isTranslucentOrFloating(TypedArray attributes) {
            final boolean isTranslucent = attributes.getBoolean(com.android.internal.R.styleable.Window_windowIsTranslucent, false);
            final boolean isSwipeToDismiss = !attributes.hasValue(com.android.internal.R.styleable.Window_windowIsTranslucent)
                                            && attributes.getBoolean(com.android.internal.R.styleable.Window_windowSwipeToDismiss, false);
            final boolean isFloating = attributes.getBoolean(com.android.internal.R.styleable.Window_windowIsFloating, false);
            return isFloating || isTranslucent || isSwipeToDismiss;
        }

根据以上代码分析,当TargetSdkVersion>=27时,在使用SCREEN_ORIENTATION_LANDSCAPE、SCREEN_ORIENTATION_PORTRAIT等相关属性时,使用windowIsTranslucent、windowIsFloating、windowSwipeToDismiss主题属性会触发异常。

发现问题后,可以根据需要更改TargetSdkVersion或者去掉主题的相关属性。

于 2018-06-12T03:58:16.650 回答
9

我不能同意评分最高的答案,因为

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

导致错误

java.lang.IllegalStateException:只有全屏不透明活动才能请求方向

但这使它对我有用

<style name="TranslucentTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

并将其用于您的活动,当您从

InterstitialActivity extends AppCompatActivity

在 AndroidManifest.xml 中

    <activity
        android:name=".InterstitialActivity"
        ...
        android:screenOrientation="portrait"
        android:theme="@style/TranslucentTheme" />
于 2018-04-18T11:17:54.727 回答
9

android:screenOrientation="portrait"只需在 Manifiest.xml 中删除这行活动

该活动将从之前的活动中获取方向,因此无需应用具有<item name="android:windowIsTranslucent">true</item>.

于 2018-11-22T13:54:06.050 回答
7

只需在 Manifiest.xml 中设置活动方向

android:screenOrientation="unspecified"

或限制为纵向

您也可以在 Activity 中使用,在onCreate方法调用之前使用,super.onCreate(...)例如

@Override
    protected void onCreate(Bundle savedInstanceState) {
        setOrientation(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_xml_layout);
        //...
        //...
}

// Method 
public static void setOrientation(Activity context) {
   if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.O)
        context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
      else
        context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
于 2018-08-25T18:57:48.983 回答
6

似乎当目标 sdk 是 pie (api level 28.0) 并且 windowIsTranslucent 是 true

<item name="android:windowIsTranslucent">true</item>

然后您尝试访问方向。问题来自android oreo 8.0(api level 26)有两种方法可以解决这个问题

  1. 删除方向
  2. 或将 windowIsTranslucent 设置为 false

如果您像这样在清单中设置方向

android:screenOrientation="portrait"

或在这样的活动课上

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

从这两个地方删除。

并观察到,当您将 windowIsTranslucent 设置为 true 时,它​​会从父活动中获取方向。

于 2019-07-02T13:36:16.577 回答
5

在清单文件中将第二个活动 parentActivityName 设置为第一个活动,并将 screenOrientation 参数删除到第二个活动。这意味着您的第一个活动是父母并决定您的第二个活动的方向。

<activity
        android:name=".view.FirstActiviy"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme" />

<activity
        android:name=".view.SecondActivity"
        android:parentActivityName=".view.FirstActiviy"
        android:theme="@style/AppTheme.Transparent" />
于 2018-07-21T14:26:35.700 回答
4

我最近遇到了这个问题,这是解决方案。

无需更改您在 android manifest 文件中设置的屏幕方向参数。

只需添加两个文件夹

res>values
as  res>values-v26 
and res>values-v27

然后将您的styles.xml 和themes.xml 文件复制到那里。

并将以下参数从 TRUE 更改为 FALSE。

<item name="android:windowIsTranslucent">true</item>

<item name="android:windowIsTranslucent">false</item>

它会起作用的。

Android 8.0的一个常见bug

于 2019-11-16T22:32:27.360 回答
4

我有同样的问题,我的解决方案是消除这条线

android:screenOrientation="portrait"

然后在活动中添加:

if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
于 2018-08-16T18:19:06.280 回答
3

利用

android:screenOrientation="behind"

和主题

<style name="translucent" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">#beaaaaaa</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
    <item name="android:typeface">normal</item>
    <item name="android:windowSoftInputMode">adjustPan</item>
    <item name="windowActionBar">false</item>
</style>
于 2019-07-02T08:15:02.910 回答
3

经过一番研究,似乎这个问题可能是由于谷歌错误。对我来说,我可以在我的活动 onCreate 方法中留下这一行:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

并且我将 targetSdkVersion 更改为 26。在我的 onCreate 中设置该行仍然会导致崩溃,而我的 targetSdkVersion 仍设置为 27。由于到目前为止没有其他人的解决方案对我有用,我发现这可以作为临时修复现在。

于 2018-09-26T01:04:08.970 回答
3

只有 8.0.0 抛出异常,8.0 以上已经移除异常

8.0.0 抛出异常

于 2019-01-04T13:10:23.207 回答
3

这是 android 版本 7(Api 级别 24,25)和 8(API 级别 26,27)中 style.xml 文件中的主题之间的冲突(错误),当你有

android:screenOrientation="portrait" :AndroidManifest.xml 中的特定活动(崩溃)

&

<item name="android:windowIsTranslucent">true</item> 

在 style.xml 中应用于该活动的主题中

可以根据您的需要通过以下方式解决:

1- 删除上述引起冲突的属性

2-根据需要将 Activity 方向更改为这些值之一:unspecified或者behind可以在此处找到等等:Android 的 Google 参考:screenOrientation `

3- 在运行时以编程方式设置方向

于 2019-01-07T15:18:54.560 回答
2

可能您显示的 Activity 看起来像 Dialog(非全屏),所以从Manifest或代码中删除screenOrientation 。这将解决问题。

于 2018-04-17T12:00:29.463 回答
2

唯一对我有用的是改变

android:screenOrientation="portrait"

android:screenOrientation="unspecified"

在所有半透明活动的清单中。

这样它就与所有 API 版本兼容,因为半透明活动似乎从targetApi: 28.

样式可以保留原样,包括<item name="android:windowIsTranslucent">true</item>.

于 2019-04-01T13:59:07.313 回答
2

如果使用 windowIsTranslucent 'true' 并强制设置方向,我仅在 SDK 26 (8.0.0) 中遇到此问题:

这是解决方案:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);   

        // fixing portrait mode problem for SDK 26 if using windowIsTranslucent = true
        if (Build.VERSION.SDK_INT == 26) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
        } else {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }        
    }



       <style name="SplashActivty" parent="AppTheme">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
    </style>



<!-- Splash screen -->
        <activity
            android:name="edu.aku.family_hifazat.activities.SplashActivity"
            android:label="@string/app_name"
            android:screenOrientation="unspecified"
            android:theme="@style/SplashActivty">

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

        </activity>
于 2018-09-28T07:13:22.270 回答
2

当我尝试捕获图像或从图库中获取图像时出现此错误对我有用的是删除两者

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

android:screenOrientation="portrait"

现在我的活动正在使用这个主题:

  <style name="Transparent" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation</item>
        <item name="android:windowIsTranslucent">false</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>
于 2019-01-02T05:06:56.960 回答
1

这发生在 27 之后,使用 targetSdkVersion 26 替换,等待谷歌修复它

于 2018-07-18T04:04:12.983 回答
1

如果您还没有解决问题,只需在清单中注册广告活动,如下所示:

<activity
android:name="com.google.android.gms.ads.AdActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
tools:replace="android:theme"
 />

您还需要更新到最新版本的 sdk。

于 2018-04-05T10:28:14.930 回答
1

我通过删除android:screenOrientation="portrait"以下代码并将其添加到我的 onCreate 中解决了这个问题

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

而我的主题属性是

<item name="android:windowIsTranslucent">true</item>
<item name="android:windowDisablePreview">true</item>
于 2020-02-24T03:29:16.967 回答
1

有些答案对我来说不是很清楚,也没有用,

所以这导致了错误:

<activity
android:name=".ForgotPass_ChangePass"
android:screenOrientation="portrait" <--- // this caused the error
android:windowSoftInputMode="stateHidden|adjustPan|adjustResize"/>

android studio 建议将 screenOrientation 设置为 fullSensor

android:screenOrientation="fullSensor"

是的,这将修复错误,但我希望将我的布局保持在纵向模式,并且 fullSensor 将根据传感器进行操作

"fullSensor" 方向由设备方向传感器确定 4 个方向中的任何一个。这类似于“传感器”,除了它允许 4 种可能的屏幕方向中的任何一种,而不管设备通常会做什么(例如,某些设备通常不会使用反向纵向或反向横向,但这会启用这些)。在 API 级别 9 中添加。

来源:android:screenOrientation

所以对我有用的解决方案我使用了“nosensor”:

 <activity
        android:name=".ForgotPass_ChangePass"
        android:screenOrientation="nosensor"
        android:windowSoftInputMode="stateHidden|adjustPan|adjustResize"/>

“nosensor” 确定方向时不参考物理方向传感器。传感器被忽略,因此显示器不会根据用户移动设备的方式旋转。

在此处查看 android 文档

于 2021-06-30T15:09:21.803 回答
1

我不知道这是来自 Google 的错误还是预期的行为,但我(至少暂时)通过在 Gradle 中将 compileSdkVersion 和 targetSdkVersion 改回 26 来解决它......

于 2018-03-19T23:10:21.220 回答
0

请检查您的 Activity 的样式,并确保如果您没有使用任何与 Translucent 相关的东西,请将样式更改为备用。这样我们就可以解决这个问题。

android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
于 2020-01-10T07:52:13.040 回答
0

我刚刚从非全屏元素中删除了标签“肖像”,一切都很好。

android:screenOrientation="portrait"
于 2019-05-23T15:57:16.650 回答
-1

如果Activity是自己创建的,可以在Activity中试试这个:

@Override
public void setRequestedOrientation(int requestedOrientation) {
    try {
        super.setRequestedOrientation(requestedOrientation);
    } catch (IllegalStateException e) {
        // Only fullscreen activities can request orientation
        e.printStackTrace();
    }
}

这应该是最简单的解决方案。

于 2019-01-10T07:21:11.310 回答
-1

我有同样的问题,我只是通过设置这个来解决它:<item name="android:windowIsFloating">false</item>在styles.xml中

于 2019-06-05T13:39:04.237 回答
-2

尝试删除您的主题行:

<item name="android:windowIsTranslucent">true</item>

<item name="android:windowIsFloating">true</item>

在此之后,添加android:screenOrientation="portrait"您的活动。

于 2019-02-22T01:27:00.637 回答
-3

用户扩展AppCompatActivity,它将起作用!

于 2018-10-08T12:44:09.470 回答