I am trying to setRequestOrientation to a portrait but Activity rotates to landscape and set to portrait when auto-rotate enabled.
The Activity will support both landscape and portrait mode.
The problem will happen above Android 7.0.
Try setting the screen orientation to follow the previous set orientation like this
<activity
android:name="com.my.example.MyActivity"
android:screenOrientation="behind" >
</activity>
Set it to behind.
The default android:screenOrientation is unspecified. This means
The default value. The system chooses the orientation. The policy it uses, and therefore the choices made in specific contexts, may differ from device to device.
In some tablets, for example, the default that the system will choose is landscape, so the system may be auto-rotating to landscape as soon as you start the activity, and then flipping from landscape to portrait when you do your setRequestOrientation.
So to prevent the system from behaving this way, you could try choosing the android:screenOrientation for each of those activities in your android manifest like:
<activity
android:name="com.my.example.MyActivity"
android:screenOrientation="locked" >
</activity>
or
<activity
android:name="com.my.example.MyActivity"
android:screenOrientation="behind" >
</activity>
depending on your app requirements. See the Google documentation for more information on these and other options.
Related
I'm currently developing an app, in which phones have forced portrait mode, while tablets support portrait mode as well as landscape mode. Some pages the layouts have respective landscape versions in the layout-land folder.
The problem
While using the app on a phone (so portrait only) and when autorotate on the phone is enabled, the landscape layout file gets loaded while the app is displayed as portrait mode.
When does this occur
To recreate this behaviour I open an activity and rotate the device. Then when I navigate to another activity, or close and open the application, the landscape layout gets loaded.
Method of forcing portrait mode
To force portrait mode on phones, I call
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
in my BaseActivity onCreate method.
Other details
targetSdkVersion: 26
using support library 26.0.0
Thank you for helping!
Edit 1:
Unfortunately using (a combination of) the following settings in the manifest file gives the same behaviour.
android:screenOrientation="sensorPortrait"
android:screenOrientation="portrait"
android:configChanges="orientation"
Edit 2:
I've now tested on multiple devices (emulator, One plus, Motorola, Samsung and some more) and this oddity only happens on a Samsung A5 (api 23) for me.
Is other Activities are also have that code?
I meant, other Activity that doesn't extends BaseActivity?
I would prefer to set in AndroidManifest.xml file in each activity tag like >> android:screenOrientation="portrait"
add this line android:screenOrientation="portrait" in your project manifest file inside activity. Hope it work well.
Try this
<activity
android:name=".Activity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="#string/title_activity_test_edit"
android:screenOrientation="sensorPortrait"
android:theme="#style/Theme.DesignDemo"
android:windowSoftInputMode="stateAlwaysHidden" />
Portrait orientation, but can be either normal or reverse portrait based on the device sensor.
Refer this link for more details :
https://developer.android.com/guide/topics/manifest/activity-element.html
As you mentioned,
phones have forced portrait mode, while tablets support portrait mode
as well as landscape mode
Set screen orientation in manifest will not work.
Use layout-land-sw600dp, layout-land-sw720dp folders for landscape view for tablets. Also please take a look at this SO thread
I want my android studio app to be landscape only, but to switch orientation when the phone is rotated.
This means that when u flip the phone 180°, it will still be landscape but will flip sides. Like the clash of clans game.
You should add the sensorLandscape screenOrientation tag to your activity in the android manifest file and you should be good to go.
android:screenOrientation="sensorLandscape"
Make sure to add this to all the activities that you want to have in landscape mode.
All you need is to go to your AndroidManifest.xml file and under each Activity add the screen orientation tag and set it to sensorLandscape. Make sure you do it for all the other activities if you want them to be in landscape too.
For Example :
<activity
android:name=".MainActivity"
android:label="#string/title_MainActivity"
android:screenOrientation="sensorLandscape">
</activity>
I got an activity which I want to always remain with portrait layout. I got these settings in the manifest file:
<activity android:name="Main"
android:launchMode="singleInstance"
android:label="#string/app_name" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="stateAlwaysHidden|adjustNothing">
This settings makes the activity just load the portrait layout to the side if I turn the device on the side. I want the layout to just remain in the portrait position and that's it even though it means viewing the layout on the side when switching the device 90 degrees.
From Android 3.2 onwards, you also need to add screenSize to configChanges
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation|screenSize"
From the developer docs at handling runtime changes
Caution: Beginning with Android 3.2 (API level 13), the "screen size" also changes when the device switches between portrait and landscape orientation.
Force it dynamically:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
I have problem while using lanscape mode in android.How to avoid changing of image position changing from portrait to landscape mode in android.Normally landscape4 and portrait mode is good.If we goes from one mode to another then position of images are changed. Please help me
The activity in which you are showing image, register that Activity in Android Manifest file as:
<activity
android:name="com.android.YourActivity"
android:screenOrientation="portrait">
</activity>
In this way, it will force the activity to stay in Portrait mode only.
The orientation changes causes the running activity to restart.The restart behavior is designed to help your application adapt to new configurations by automatically reloading your application with alternative resources that match the new device configuration. Hence resource intensive.
Depending on how you want you app to behave and the device performance you can handle the orientation change(config changes as a whole) in following ways:
Fixed orientation: If you want your app to have a fixed orientation in landscape or portrait mode. For this you need to set this attribute in the manifest file under the activity tag.
android:screenOrientation="portrait"
or
android:screenOrientation="landscape"
Handling the Configuration Change Yourself: You can handle the orientation change yourself if your application doesn't need to update resources during a specific configuration change and you have a performance limitation that requires you to avoid the activity restart, then you can declare that your activity handles the configuration change itself, which prevents the system from restarting your activity.
For this you need to declare this in the manifest file:
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="#string/app_name"/>
and you need to override the onConfigurationChanged() method of the activity.
** use this as the last resort as every thing needs to be handled by you.
Default behavior: You can let android handle the config changes choosing the alternative resources from the resource folder. You just need to provide these alternate resources for landscape and portrait mode.
I am developing an application to take photos using the Android native camera and load maps, etc.
The orientation of the maps has been changing as I change it, but what I actually need is to have only landscape orientation even on native apps since my whole application is landscape-only.
But how can I set the orientation?
In the AndroidManifest.xml file you specify the acceptable orientations for your application.
To force your activity to remain in landscape mode simply include the android:screenOrientation tag in your activity's definition tag.
<activity android:name=".SomeActivity"
android:label="#string/app_name"
android:screenOrientation="landscape">