Як можна відключити альбомний режим для деяких переглядів у моєму додатку Android?
Як можна відключити альбомний режим для деяких переглядів у моєму додатку Android?
Відповіді:
Додайте android:screenOrientation="portrait"
активність у AndroidManifest.xml. Наприклад:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
EDIT: Оскільки це стало надзвичайно популярною відповіддю, я відчуваю велику провину, оскільки примушувати портрет рідко є правильним рішенням проблем, до яких часто звертаються.
Основні застереження з вимушеним портретом:
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, в моєму випадку) гру.
Просто додайте Подобається цей рядок у свій Маніфест
android: 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>
Якщо ви хочете налаштувати користувача,
то я б рекомендував setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Ви можете змінити налаштування з меню налаштувань.
Я вимагаю цього, оскільки мої таймери повинні відповідати тому, що на екрані, а обертання екрана знищить поточну активність.
Це можна зробити для всієї вашої програми, не вимагаючи, щоб усі ваші дії поширювали загальний базовий клас.
Потрібно спочатку переконатися, що ви включили у свій підклас програми. У своїй програмі onCreate (), яка називається при першому запуску програми, ви реєструєте об'єкт ActivityLifecycleCallbacks (API рівня 14+) для отримання сповіщень про події життєвого циклу активності.
Це дає вам змогу виконувати власний код під час запуску будь-якої діяльності у вашому додатку (або зупинення, відновлення чи інше). У цей момент ви можете викликати setRequestedOrientation () на новостворену діяльність.
І не забудьте додати додаток: 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
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)]
Вищий клас добре працює, подібно до інших рішень, також не застосовується у всьому світі, і його потрібно розміщувати в кожному заголовку діяльності.
Ви можете змусити вашу конкретну діяльність завжди залишатися в портретному режимі, записавши це у свій маніфест.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);
}
<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
Додайте нижче коментарі для свого проекту,
npm встановити
npm я реагую-native-орієнтування-шафка
тоді ви використовуєте клас маніфесту, наприклад, 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);
}