Как отключить ландшафтный режим для некоторых видов в моем приложении для Android?
Как отключить ландшафтный режим для некоторых видов в моем приложении для Android?
Ответы:
Добавьте android:screenOrientation="portrait"
к активности в AndroidManifest.xml. Например:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
РЕДАКТИРОВАТЬ: Поскольку это стало очень популярным ответом, я чувствую себя очень виноватым, так как принуждение к портрету редко является правильным решением проблем, к которым он часто применяется.
Основные предостережения с вынужденным портретом:
retainInstance
фрагменты.Таким образом, большинство приложений должны просто позволить датчикам телефона, программному обеспечению и физической конфигурации принимать собственное решение о том, как пользователь хочет взаимодействовать с вашим приложением. Однако о некоторых случаях вы можете подумать, если вас не устраивает поведение sensor
ориентации по умолчанию в вашем случае использования:
nosensor
для ориентации. Это заставляет пейзаж на большинстве планшетов и портрет на большинстве телефонов, но я все равно не рекомендовал бы это для большинства «обычных» приложений (некоторые пользователи просто любят набирать текстовую клавиатуру на своих телефонах, а многие пользователи планшетов читают в портретном режиме - и вы должны позволить им).sensorPortrait
может быть лучше, чем portrait
для Android 2.3+; это позволяет перевернуть портрет, что довольно часто встречается при использовании планшета.Я не знал о AndroidManifest.xml
переключении файлов, пока не прочитал этот пост, поэтому в своих приложениях я использовал это вместо:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
Добавьте это android:screenOrientation="portrait"
в свой файл манифеста, где вы объявите свою деятельность следующим образом
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
Если вы хотите использовать Java-код, попробуйте
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
прежде чем вызывать setContentView
метод для вашей деятельности в onCreate()
.
Надеюсь, что это поможет и легко понятно для всех ...
Многие ответы здесь предлагают использовать "portrait"
в вашем файле AndroidManifest.xml. Это может показаться хорошим решением, но, как отмечено в документации, вы выделяете устройства, которые могут иметь только ландшафт. Вы также заставляете определенные устройства (которые лучше всего работают в ландшафте) переходить в портрет, не получая правильной ориентации.
Мое предложение использовать "nosensor"
вместо. Это позволит устройству использовать предпочтительную ориентацию по умолчанию, не будет блокировать любые покупки / загрузки в Google Play и гарантирует, что датчик не испортит вашу (NDK, в моем случае) игру.
Если вы хотите пользовательские настройки,
тогда я бы порекомендовал setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Вы можете изменить настройки из меню настроек.
Я требую этого, потому что мои таймеры должны соответствовать тому, что на экране, и вращение экрана разрушит текущую активность.
Просто добавьте лайк в своем манифесте
андроид: screenOrientation = "портрет"
<manifest
package="com.example.speedtest"
android:versionCode="1"
android:versionName="1.0" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ComparisionActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
</application>
</manifest>
Вы можете сделать это для всего приложения без необходимости расширять общий базовый класс.
Сначала нужно убедиться, что вы включили подкласс 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);
}
....
});
}
}
Используйте это в onCreate () действия
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Вы должны изменить android:screenOrientation="sensorPortrait"
в AndroidManifest.xml
Просто добавьте этот атрибут в тег активности.
android:screenOrientation="portrait"
Если вы не хотите проходить через сложность добавления ориентации в каждой записи манифеста действия, создайте класс 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......
}
Добавьте android:screenOrientation="portrait"
к активности вы хотите отключить ландшафтный режим.
Если вы хотите отключить 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);
Я надеюсь, что это поможет вам. Для более подробной информации вы можете посетить здесь, введите ссылку здесь
android:screenOrientation="nosensor">
Как изменить ориентацию в некоторых видах
Вместо того, чтобы блокировать ориентацию всей деятельности, вы можете использовать этот класс для динамической блокировки ориентации с любого вашего взгляда прагматично: -
Сделайте ваш взгляд Пейзаж
OrientationUtils.lockOrientationLandscape(mActivity);
Сделай свой взгляд Портрет
OrientationUtils.lockOrientationPortrait(mActivity);
Разблокировать ориентацию
OrientationUtils.unlockOrientation(mActivity);
Ориентация Util Class
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);
}
}
Вы должны установить ориентацию каждого вида деятельности.
<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>
Если вы используете Xamarin C #, некоторые из этих решений не будут работать. Вот решение, которое я нашел для работы.
[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]
Над классом работает хорошо, аналогично другим решениям, также не применимы глобально и должны быть помещены в каждый заголовок деятельности.
Вы можете заставить свою конкретную деятельность всегда оставаться в портретном режиме, написав это в своем manifest.xml
<activity android:name=".MainActivity"
android:screenOrientation="portrait"></activity>
Вы также можете заставить свою активность оставаться в режиме postrait, написав следующую строку в методе 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);
}
<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
Добавить ниже похвалы на ваш проект,
установка 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>
Благодарю вас!
В <apphome>/platform/android
созданный каталог AndroidManifest.xml
(копирование его из созданного). Затем добавьте android:screenOrientation=
" portrait
" ко ВСЕМ элементам деятельности.
<?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>
мы можем ограничить активность в портретном или ландшафтном режиме, используя атрибут android: screenOrientation.
если в моей программе более одного вида деятельности, тогда у вас есть свобода ограничить любое действие в любом режиме, и это никогда не повлияет на другие, которые вам не нужны.
Либо в явном классе.
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
или программно
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Примечание: вы должны вызывать это перед setContentView
методом для вашей активности в onCreate()
.
Добавьте android:screenOrientation="portrait"
в файл AndroidManifest.xml .
Например :
<activity android:name=".MapScreen"
android:screenOrientation="portrait"></activity>
В надежде помочь кому-то еще, вам нужен следующий атрибут ACTIVITY в AndroidManifest.xml:
Android: configChanges = "ориентация"
Итак, узел полной активности:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">
У меня сработало, попробуйте добавить этот код в файл AndroidManifest
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
....
....
</application>
Поместите это в свой манифест.
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" />
Ориентация будет портретной, но если телефон пользователя перевернут, он также показывает правильный путь. (Таким образом, ваш экран будет вращаться на 180 градусов).
Система игнорирует этот атрибут, если действие выполняется в многооконном режиме .
если ваша деятельность связана с первым состоянием ориентации устройства, получите текущую ориентацию устройства в 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);
}