Lock screen orientation when targeting Android API 27 with a non-opaque activity

前端 未结 9 733
囚心锁ツ
囚心锁ツ 2020-12-13 09:30

I have an activity that has android:windowIsTranslucent set to true and android:windowBackground set to a translucent background. I ju

相关标签:
9条回答
  • 2020-12-13 09:38

    So what I did was remove any screenOrientation property from manifest and add it to my BaseActivity (from which all my activities extend), this code

     if(!(this instanceof TranslucentActivity)){
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    

    The TranslucentActivity will have the orientation from the Activity behind.

    0 讨论(0)
  • 2020-12-13 09:39

    I also faced the same problem. As others said, If I deleted android:screenOrientation="portrait" or overrided it with android:screenOrientation="unspecified", then the exception was gone. And it seems that the front activity's orientation follows the behind activity's orientation.

    I thought about it. If the front activity is transparent and the behind activity's orientation is different, the display becomes strange. So, I can understand why this check logic was added However, I wonder that why this problem was not occurred in Developer Preview 8.0.0.

    0 讨论(0)
  • 2020-12-13 09:39

    Thanks @JerabekJakub. My test result - keep sdk 27 and remove the following lines can also solve the crash.

     android:configChanges="orientation"
     android:screenOrientation="portrait"
    
    0 讨论(0)
  • 2020-12-13 09:46

    The workaround is to set targetSdk back to 26.

    The reason why is your application crashes is here in this commit.

    As you can see here, you are not the only one - this behavior has been reported to Google as issue. It has been fixed, but we don't know how and when it will be released.


    I can also confirm what "sofakingforever" says in comments, if there is non-translucent activity with fixed orientation behind your translucent, the translucent will not rotate. So you can just remove android:screenOrientation="portrait" from manifest as well.

    0 讨论(0)
  • 2020-12-13 09:49

    it seems like it's a new feature/bug on API 27. However, you can delete android:screenOrientation Or android:screenOrientation="unspecified"

    0 讨论(0)
  • 2020-12-13 09:51

    The solution worked for me is deleting

    android:screenOrientation="portrait" 
    

    from all the full screen transparent activities which means their theme contains

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

    Also to make sure that orientation works correct for below Oreo I added this to the onCreate() of the activities.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // This activity is a fullscreen transparent activity, so after Oreo Android doesn't allow fullscreen
        // transparent activities to specify android:screenOrientation="portrait" in the manifest. It will pick up
        // from the background activity. But for below Oreo we should make sure that requested orientation is portrait.
        if (VERSION.SDK_INT < VERSION_CODES.O) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    }
    
    0 讨论(0)
提交回复
热议问题