问题
Android Studio 3.6.
I want my app to be always in portrait
mode. So in my AndroidMainfest.xml
:
<activity
android:name=".activity.SplashActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
I run the app and SplashActivity
shows in portrait
mode. Nice.
But the editor shows the following error:
Expecting android:screenOrientation="unspecified"
Why?
回答1:
In your manifest tag (just under xmlns:android="http://schemas.android.com/apk/res/android"
), put
xmlns:tools="http://schemas.android.com/tools"
Then inside the application tag, put
tools:ignore="LockedOrientationActivity"
回答2:
it only affects Android Studio 3.6+
What is the Issue here? This issue occurs because android framework wants user to control the app orientation himself it is not advised to restrict your app orientation for example if a user wants to use the app in landscape orientation he just flips the device and sensors will do the work but when a developer restrict screen orientation, even when rotation sensor works app will stay in pre-defined state, in a way you are restricting user's device capabilities.
What to do now? You have two options., First is to ignore the error as it won't cause any build failure even I am doing the same and apk/aab generation is as usual Another Option is to provide Landscape Layouts or to handle the rotation like in some apps which recognize if orientation gets changed they will prompt the user to change the orientation as the app is not supported in such orientation
It may change in future => at present it is not effecting our build process but it might change in future
回答3:
In Android studio 3.6.0 i guess they want the user to handle the orientation and encourage developer to use ViewModel stuff. Let me explain screenOrientation in detail
android:screenOrientation="portrait"
will give you error you have to either specify
android:screenOrientation="fullSensor" or android:screenOrientation="unspecified"
fullSensor Means either you have ON the "Rotate off" or not it will change the orientation based on you move the phone
unspecified Means if you have ON the Rotate off then it will stay only in that orientation and if not then it will change the orientation based on you move the phone.
回答4:
tools:ignore="GoogleAppIndexingWarning,LockedOrientationActivity"
回答5:
I found 2 way of solving this problem
First,
Android Studio -> Preferences (or settings in Windows)
-> search "chrome"
-> Uncheck "Activity is locked to an orientation"
-> apply and ok
-> Sync Project with Gradle flie
Second, `
Select "Run" from the main menu
-> Edit Configurations.
-> Launch options - Launch
-> select Nothing or Specified Activity
-> Sync Project with Gradle file
回答6:
Add following line after android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"
Then click Alt+Enter
回答7:
I have used the below Procedure. It works perfectly for me. In Android studio 3.6.0 I think they want the user to handle the orientation and encourage the developer to use ViewModel stuff. Use the below Procedure to ignore that.
Firstly Add :
xmlns:android="http://schemas.android.com/apk/res/android"
in the manifest tag.
Secondly, Add
tools:ignore="LockedOrientationActivity"
in application tag. Happy Coding.
回答8:
I have faced this issue, In my requirement, some of the activity will support both orientations and remains will keep in portrait, In this case, I resolved by the following steps:
Case-1:- To lock Orientation
Step-1: Please Add following line Application tag in AndroidManifest.xml
tools:ignore="LockedOrientationActivity"
<application
android:name=".activity.MyApplication"
tools:ignore="LockedOrientationActivity">
Step-2: If you want to lock screen orientation either in portrait or landscape add the following line in the activity tag
android:screenOrientation="portrait" or "landscape"
Case-2:- Suppose if u want to allow orientation in particular activity and have a specific design for landscape
Step-1: Remove Orientation value in configchanges and remove screen orientation if it exists from activity tag, and my personal suggestion use (LifecycleObserver) in Activity for without losing values while changing orientation.
android:configChanges="orientation"
android:screenOrientation="portrait" or "landscape"
This is the way I resolve this issue, hope it helps, Thanks & Happy Coding.
回答9:
you can use this code:
if(MainActivity.this.getResources().getConfiguration().orientation== Configuration.ORIENTATION_PORTRAIT){
MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}
回答10:
Try This Solution:
AndroidMainfest :
<activity
android:name="com.ui.activity.SplashActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Hope this helps!
回答11:
Try putting the following in the activity tag
android:configChanges="orientation"
android:screenOrientation="portrait"
来源:https://stackoverflow.com/questions/58519021/in-androidmanifest-expecting-androidscreenorientation-unspecified