Как отключить ландшафтный режим для некоторых видов в приложении для Android?
Как отключить ландшафтный режим в Android?
Ответ 1
Добавьте android:screenOrientation="portrait"
к действию в AndroidManifest.xml. Например:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
РЕДАКТИРОВАТЬ: Поскольку это стало очень популярным ответом, я чувствую себя очень виноватым, так как принуждение к портрету редко является правильным решением проблем, к которым оно часто применялось.
Основные предостережения с вынужденным портретом:
- Это не освобождает вас от необходимости думать о событиях жизненного цикла активности или надлежащего сохранения/восстановления состояния. Помимо ротации приложений существует множество вещей, которые могут вызвать разрушение/восстановление активности, включая такие неизбежные вещи, как многозадачность. Там нет ярлыков; научиться использовать связки и
retainInstance
фрагментыretainInstance
. - Имейте в виду, что в отличие от довольно однородного восприятия iPhone, есть некоторые устройства, где портрет не является явно популярной ориентацией. Когда пользователи работают на устройствах с аппаратными клавиатурами или игровыми площадками, такими как Nvidia Shield, на Chromebook, на складных устройствах или на Samsung DeX, принудительный портрет может сделать ваше приложение либо ограничивающим, либо огромным неудобством в использовании. Если в вашем приложении нет сильных аргументов UX, которые могут привести к негативным последствиям для поддержки других ориентаций, вам, вероятно, не стоит форсировать ландшафт. Я говорю о таких вещах, как "это кассовое приложение для одной конкретной модели планшета, которое всегда используется в стационарной аппаратной док-станции".
Таким образом, большинство приложений должны просто позволить датчикам телефона, программному обеспечению и физической конфигурации принимать собственное решение о том, как пользователь хочет взаимодействовать с вашим приложением. Однако о некоторых случаях вы можете подумать, если вас не устраивает поведение ориентации sensor
по умолчанию в вашем случае:
- Если ваша основная проблема заключается в случайном изменении ориентации в середине активности, то, по вашему мнению, датчики и программное обеспечение устройства не справятся (например, в игре на основе наклона), подумайте о поддержке пейзажа и портрета, но с использованием
nosensor
для ориентации. Это заставляет пейзаж на большинстве планшетов и портрет на большинстве телефонов, но я все равно не рекомендовал бы это для большинства "обычных" приложений (некоторые пользователи просто любят набирать текстовую клавиатуру на своих телефонах, а многие пользователи планшетов читают в портретном режиме - и вы должны позволить им). - Если по какой-то причине вам все еще нужно принудительно установить портрет, то
sensorPortrait
может быть лучше, чемportrait
для Android 2. 3+; это позволяет перевернуть портрет, что довольно часто встречается при использовании планшета.
Ответ 2
Я не знал о переключателе файла AndroidManifest.xml
, пока не прочитал этот пост, поэтому в моих приложениях я использовал это вместо:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
Ответ 3
Добавьте этот android:screenOrientation="portrait"
в вашем файле манифеста, где вы объявляете свою активность следующим образом:
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
Если вы хотите использовать java-код, попробуйте
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
прежде чем вы setContentView
метод setContentView
для своей активности в onCreate()
.
Надеюсь эта помощь и легко понятна для всех...
Ответ 4
Многие ответы здесь предлагают использовать "portrait"
в вашем файле AndroidManifest.xml. Это может показаться хорошим решением, но, как отмечается в документации, вы выделяете устройства, которые могут иметь только ландшафт. Вы также заставляете определенные устройства (которые лучше всего работают в ландшафте) входить в портрет, не получая правильную ориентацию.
Мое предложение - использовать "nosensor"
вместо этого. Это не позволит устройству использовать предпочтительную ориентацию по умолчанию, не будет блокировать покупки/загрузки в Google Play и обеспечит, что датчик не испортит вашу игру (NDK, в моем случае).
Ответ 5
Если вы хотите установить пользовательские настройки,
то я бы рекомендовал setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Вы можете изменить настройки в меню настроек.
Мне нужно это, потому что мои таймеры должны соответствовать тому, что на экране, и вращение экрана уничтожит текущую активность.
Ответ 6
Просто добавьте Like This Line в свой манифест
android: screenOrientation = "портрет"
<manifest
package="com.example.speedtestmeter"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="ComparisionActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="GaugeView"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="Resultactivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
</application>
</manifest>
Ответ 7
Используйте это в onCreate() Activity
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Ответ 8
Просто добавьте этот атрибут в свой тег активности.
android:screenOrientation="portrait"
Ответ 9
Вы должны изменить android:screenOrientation="sensorPortrait"
в AndroidManifest.xml
Ответ 10
Если вы не хотите, чтобы вы столкнулись с необходимостью добавления ориентации в каждую манифестную запись активности, создайте класс BaseActivity (наследует "Activity" или "AppCompatActivity" ), который будет наследоваться при каждом действии вашего приложения из "Activity" или "AppCompatActivity" и просто добавьте следующий код в свой BaseActivity:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// rest of your code......
}
Ответ 11
Добавьте в свой файл манифеста следующий фрагмент.
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait"/>
Этот режим поддерживает только портретный режим
Ответ 12
Добавьте android:screenOrientation="portrait"
в действие, которое вы хотите отключить ландшафтный режим.
Ответ 13
Если вы хотите отключить Landscape mode for your android app
(или отдельного действия), все, что вам нужно сделать, это добавить,
android:screenOrientation="portrait"
для тега активности в файле AndroidManifest.xml
.
Подобно:
<activity android:name="YourActivityName"
android:icon="@drawable/ic_launcher"
android:label="Your App Name"
android:screenOrientation="portrait">
Другой способ, программный подход.
Если вы хотите сделать это программно, т.е. используя код Java. Вы можете сделать это, добавив приведенный ниже код в класс Java для действия, которое вы не хотите отображать в ландшафтном режиме.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Я надеюсь, что это поможет вам. Для более подробной информации вы можете посетить здесь, введите ссылку здесь
Ответ 14
Как изменить ориентацию в некотором представлении
Вместо блокировки ориентации всей активности вы можете использовать этот класс для динамического блокирования ориентации из любого из ваших представлений прагматично: -
Сделайте свой вид Пейзаж
OrientationUtils.lockOrientationLandscape(mActivity);
Сделайте свой вид Портрет
OrientationUtils.lockOrientationPortrait(mActivity);
Разблокировать Ориентация
OrientationUtils.unlockOrientation(mActivity);
Ориентация Класс Util
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.view.Surface;
import android.view.WindowManager;
/* * This class is used to lock orientation of android app in nay android devices
*/
public class OrientationUtils {
private OrientationUtils() {
}
/** Locks the device window in landscape mode. */
public static void lockOrientationLandscape(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
/** Locks the device window in portrait mode. */
public static void lockOrientationPortrait(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
/** Locks the device window in actual screen mode. */
public static void lockOrientation(Activity activity) {
final int orientation = activity.getResources().getConfiguration().orientation;
final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
.getRotation();
// Copied from Android docs, since we don't have these values in Froyo
// 2.2
int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
// Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) {
SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
} else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
}
/** Unlocks the device window in user defined screen mode. */
public static void unlockOrientation(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
}
}
Ответ 15
использование
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
Ответ 16
Вы должны установить ориентацию каждого вида деятельности.
<activity
android:name="com.example.SplashScreen2"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.Registration"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.Verification"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.WelcomeAlmostDone"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.example.PasswordRegistration"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
Ответ 17
добавить класс внутри метода oncreate()
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Ответ 18
Если вы используете Xamarin С#, некоторые из этих решений не будут работать. Вот решение, которое я нашел для работы.
[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]
Над классом хорошо работает, подобно другим решениям, также не применимым в глобальном масштабе и должен быть помещен в каждый заголовок активности.
Ответ 19
Вы можете заставить свою конкретную деятельность всегда оставаться в портретном режиме, написав это в своем манифесте. xml
<activity android:name=".MainActivity"
android:screenOrientation="portrait"></activity>
Вы также можете заставить свою деятельность оставаться в режиме послепродажного письма, написав следующую строку в своей деятельности по методу onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Ответ 20
Просто добавьте android:screenOrientation="portrait"
в тег активности в манифесте приложения.
Например:
<activity android:name=".ui.activities.MainActivity"
android:screenOrientation="portrait"></activity>
Ответ 21
Вы должны поместить этот код в файл манифеста........
<activity android:name=".SunderFlowersActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
>
</activity>
Ответ 22
Вы можете сделать это для всего вашего приложения, не заставляя все ваши действия расширять общий базовый класс.
Сначала нужно убедиться, что вы включили подкласс Application в свой проект. В его onCreate(), вызываемом при первом запуске приложения, вы регистрируете объект ActivityLifecycleCallbacks (уровень API 14+) для получения уведомлений о событиях жизненного цикла активности.
Это дает вам возможность выполнять свой собственный код всякий раз, когда какая-либо активность в вашем приложении запускается (или останавливается, или возобновляется, или как угодно). В этот момент вы можете вызвать setRequestedOrientation() для вновь созданного действия.
И не забудьте добавить app: name = ". MyApp" в ваш файл манифеста.
class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// register to be informed of activities starting up
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity,
Bundle savedInstanceState) {
// new activity created; force its orientation to portrait
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
....
});
}
}
Ответ 23
<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
Ответ 24
В каталоге <apphome>/platform/android
создан AndroidManifest.xml
(копирование его из сгенерированного).
Затем добавьте android:screenOrientation=
"portrait
" для ВСЕХ элементов активности.
Ответ 25
Добавить android:screenOrientation="portrait"
в файле AndroidManifest.xml.
Например :
<activity android:name=".MapScreen"
android:screenOrientation="portrait"></activity>
Ответ 26
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="in.co.nurture.bajajfinserv">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
мы можем ограничить активность в портретном или альбомном режиме, используя атрибут или андроид: screenOrientation.
Если в моей программе имеется более одного действия, то у вас есть свобода ограничивать любую деятельность в любом режиме, и она никогда не влияет на другие, которые вы не хотите.
Ответ 27
Добавить ниже похвалы на ваш проект,
установка npm
нпм я реагирую-родной-ориентация-шкафчик
затем вы используете класс манифеста, например, React_Native (папка вашего проекта)/android/app/src/main/AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
Благодарю вас!
Ответ 28
В надежде помочь кому-то еще, следующий атрибут в ACTIVITY в AndroidManifest.xml вам нужен:
андроид: configChanges = "ориентация"
Итак, полная активность node:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">
Ответ 29
если ваша активность связана с первым состоянием ориентации устройства, получите текущую ориентацию устройства в методе onCreate
, а затем исправьте его навсегда:
int deviceRotation = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();
if(deviceRotation == Surface.ROTATION_0) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else if(deviceRotation == Surface.ROTATION_180)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
else if(deviceRotation == Surface.ROTATION_90)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
else if(deviceRotation == Surface.ROTATION_270)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
Ответ 30
В kotlin же может быть программно достигнуто с использованием ниже
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT