Android - отключить режим ландшафта?

голоса
781

Как отключить ландшафтный режим для некоторых видов в моем Android приложения?

Задан 24/02/2009 в 16:29
источник пользователем
На других языках...                            


32 ответов

голоса
1k

Добавить android:screenOrientation="portrait"к деятельности в AndroidManifest.xml. Например:

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait" />

EDIT: Так как это стало супер-популярным ответом, я чувствую себя очень виноватым как принуждение портрета редко бывает правильное решение проблем , он часто применяется.
Основные предостережений с принудительным портретом:

  • Это не освобождает вас от того , чтобы думать о деятельности событий жизненного цикла или должным образом сохранение / восстановление состояния. Есть много вещей , кроме вращения приложения , которое может вызвать разрушение деятельности / отдых, в том числе неизбежных вещей , как многозадачность. Там нет ярлыков; научиться использовать узлы и retainInstanceфрагменты.
  • Имейте в виду, что в отличие от довольно однородного опыта iPhone, есть много устройств, где портрет не ясно популярной ориентации. Когда пользователи на устройствах с аппаратной клавиатурой или геймпадами а-ля Droid 1-4, Xperia Play, или Nvidia Shield, заставляя портрет может сделать ваше приложение гигантского удобства хлопоты (особенно на щите). Если ваше приложение не имеет чрезвычайно конкретный случай использования, что приведет к сходу негативный опыт для поддержки других ориентаций, вы, вероятно, не заставит пейзаж. Я говорю о таких вещах, как, «это приложение дистанционного управления для телефона с ИК-бластер только на одной стороне устройства» или «это приложение кассовый аппарат для одной конкретной модели планшета всегда используется в фиксированной аппаратный док «.

Так как большинство приложений должны просто позволить датчики телефона, программное обеспечение и физическая конфигурация делают свое собственное решение о том , как пользователь хочет взаимодействовать с вашим приложением. Несколько случаев вы все равно хотите , чтобы думать, хотя, если вы не довольны поведением по умолчанию sensorориентации в вашем случае использования:

  • Если ваша основная проблема является случайной ориентация изменяется в середине деятельности , что вы думаете , датчики устройства и программное обеспечение не будут справляться с хорошо (например, в игре наклона на основе) рассмотреть возможность поддержка пейзажа и портрета, но с использованием nosensorдля ориентации. Это вынуждает пейзаж на большинстве планшетов и портрет на большинстве телефонов, но я до сих пор не рекомендовал бы это для большинства «нормальных» приложений (некоторые пользователи просто хотели ввести в ландшафтном softkeyboard на своих телефонах, и многие пользователи планшетных чтения в портретном - и вы должны позволить им).
  • Если вы все еще нужно , чтобы заставить портрет по какой - то причине, sensorPortraitможет быть лучше , чем portraitдля Android 2.3+; это позволяет перевернутый портрет, который является довольно распространенным явлением в использовании планшета.
Ответил 24/02/2009 в 18:04
источник пользователем

голоса
95

Я не знал о AndroidManifest.xmlпереключателе файла до прочтения этого поста, поэтому в моих приложениях я использовал вместо этого:

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);     //  Fixed Portrait orientation
Ответил 18/10/2010 в 15:53
источник пользователем

голоса
31

Добавьте это android:screenOrientation="portrait"в ваш файл манифеста , где вы объявляете вашу деятельность , как это

<activity android:name=".yourActivity"
    ....
    android:screenOrientation="portrait" />

Если вы хотите сделать с помощью кода Java попробовать

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

перед вызовом setContentViewметода для вашей деятельности в onCreate().

Надеюсь, что это поможет и легко понятной для всех ...

Ответил 27/09/2012 в 10:47
источник пользователем

голоса
19

Много ответов здесь предполагают использовать "portrait"в файле AndroidManifest.xml. Это может показаться хорошим решением - но , как указано в документации, вы выделяющее устройства , которые могут иметь только пейзаж. Вы также принуждая определенные устройства (которые лучше всего работают в альбомной ориентации) , чтобы войти в портрет, не получив надлежащую ориентацию.

Мое предложение заключается в использовании "nosensor"вместо этого. Это оставит устройство , чтобы использовать его по умолчанию предпочтительной ориентации, не будет блокировать любые покупки / загрузки в Google Play, а также обеспечит датчик не испортит ваши (NDK, в моем случае) игр.

Ответил 21/08/2013 в 15:41
источник пользователем

голоса
9

Если вы хотите-пользовательские настройки,

то я бы рекомендовал setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Вы можете изменить настройки из меню настроек.

Я требую, это потому, что мои таймеры должны соответствовать тому, что находится на экране, и поворачивать экран уничтожит текущую деятельность.

Ответил 10/02/2012 в 05:46
источник пользователем

голоса
8

Просто добавьте Понравился линии в манифесте

андроид: 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>   
Ответил 05/02/2015 в 09:30
источник пользователем

голоса
5

Если вы не хотите, чтобы пройти через хлопот добавления ориентации в каждой проявленной записи деятельности лучше, создать BaseActivity класс (наследуемый «Activity» или «AppCompatActivity»), который будет наследоваться любой деятельности вашего приложения вместо «деятельности 'или „AppCompatActivity“ и просто добавьте следующий фрагмент кода в BaseActivity:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    // rest of your code......
}
Ответил 22/04/2017 в 17:51
источник пользователем

голоса
5

Используйте это в OnCreate () о деятельности

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Ответил 06/05/2015 в 09:59
источник пользователем

голоса
5

вы должны изменить android:screenOrientation="sensorPortait"в AndroidManifest.xml

Ответил 03/01/2014 в 07:04
источник пользователем

голоса
5

Просто добавьте этот атрибут в вашей деятельности тега.

 android:screenOrientation="portrait"
Ответил 01/10/2013 в 08:00
источник пользователем

голоса
4

Если вы хотите отключить 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);

Я надеюсь , что это поможет вам .Для получения более подробной информации вы можете посетить здесь ввести описание ссылки здесь

Ответил 16/03/2015 в 05:25
источник пользователем

голоса
4

Добавить android:screenOrientation="portrait"к деятельности вы хотите отключить ландшафтный режим.

Ответил 26/01/2014 в 10:30
источник пользователем

голоса
4

Добавьте следующий фрагмент в файле манифеста.

<activity android:name=".yourActivity"
          ....
          android:screenOrientation="portrait"/>

Эта поддержка только портреты режим

Ответил 16/08/2013 в 11:11
источник пользователем

голоса
3

Вы должны поместить этот код в файл манифестов .......

    <activity android:name=".SunderFlowersActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait">
        >
    </activity>
Ответил 12/05/2017 в 06:49
источник пользователем

голоса
3

Просто добавьте андроида: screenOrientation = «портрет» в тег активности в манифесте приложения.

Например:

    <activity android:name=".ui.activities.MainActivity"
       android:screenOrientation="portrait"></activity>
Ответил 28/02/2017 в 09:26
источник пользователем

голоса
3

Как изменить ориентацию в некотором зрении

Вместо блокировки ориентации всей деятельности вы можете использовать этот класс, чтобы динамически блокировать ориентацию любых из вашей точки зрения прагматического: -

Сделайте вид ландшафта

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);
    }

}
Ответил 28/04/2016 в 06:24
источник пользователем

голоса
3

Если вы используете Xamarin C # некоторые из этих решений не будет работать. Вот решение , которое я нашел работу.

[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]

Над класса работает хорошо, подобно другие решения, а также не применять в глобальном масштабе и должно быть помещено в каждом заголовке деятельности.

Ответил 20/03/2016 в 14:52
источник пользователем

голоса
3

добавить класс внутри OnCreate () метод

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Ответил 02/01/2016 в 04:54
источник пользователем

голоса
3

Вы должны установить ориентацию каждого вида деятельности.

<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>
Ответил 04/02/2015 в 07:23
источник пользователем

голоса
3

использование

android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait" 
Ответил 14/05/2012 в 17:42
источник пользователем

голоса
2

Вы можете заставить вашу конкретную деятельность всегда оставаться в портретном режиме, записывая это в 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);

}
Ответил 16/01/2017 в 06:25
источник пользователем

голоса
2
<android . . . >
    . . .
    <manifest . . . >
        . . .
        <application>
            <activity android:name=".MyActivity" 
                android:screenOrientation="portrait" 
                android:configChanges="keyboardHidden|orientation">
            </activity>
        </application>
    </manifest>
</android>
Ответил 04/09/2012 в 07:30
источник пользователем

голоса
1

Добавьте ниже воздаем на вашем проекте,

НАЯ установка

НПЙ я реагирую-нативную ориентацию шкафчик

то вы используете явный класс , как, React_Native (папку проекта) / Android / приложение / SRC / главная / 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>

Благодарю вас!

Ответил 27/12/2018 в 09:14
источник пользователем

голоса
1

добавить андроид: screenOrientation = «портрет» в AndroidManifest.xml файле.example <activity android:name=".MapScreen" android:screenOrientation="portrait"></activity>

Ответил 01/02/2012 в 08:42
источник пользователем

голоса
1

В <apphome>/platform/androidсозданном каталоге AndroidManifest.xml(скопировав его из генерируемого). Затем добавьте android:screenOrientation=« portrait» к всем элементам деятельности.

Ответил 19/09/2011 в 11:46
источник пользователем

голоса
0

Либо в явном классе.

<activity android:name=".yourActivity"
    ....
    android:screenOrientation="portrait" />

или программно

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Примечание: Вы должны назвать это прежде setContentViewметод для вашей деятельности onCreate().

Ответил 13/05/2018 в 17:23
источник пользователем

голоса
0

Вы можете сделать это для всего приложения без необходимости делать все ваши действия распространяются общий базовый класс.

Хитрость заключается в том первом, чтобы убедиться, вы включаете подкласс приложения в вашем проекте. В своем OnCreate () вызывается, когда приложение запускается впервые, вы регистрируете объект ActivityLifecycleCallbacks (уровень API 14+), чтобы получать уведомления о событиях жизненного цикла активности.

Это дает возможность выполнить свой собственный код, когда какой-либо активности в вашем приложении запускается (или остановлен, или возобновляется, или любой другой). На этом этапе вы можете позвонить setRequestedOrientation () на вновь созданную деятельности.

И не забудьте добавить приложение: имя = «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);

        }

        ....

    });

}

}

Ответил 05/04/2018 в 09:28
источник пользователем

голоса
0

Он работал для меня, попробуйте добавить этот код в файле 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>
Ответил 06/02/2018 в 09:53
источник пользователем

голоса
0
 <?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.

если у нас есть более чем один вид деятельности в моей программе, то у вас есть свобода, чтобы ограничить какой-либо одной деятельности в какой-либо одной моде и никогда не влияет на другие, которые вы не хотите.

Ответил 26/07/2017 в 12:03
источник пользователем

голоса
0

В Котлин же можно достичь с помощью программно ниже

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
Ответил 11/06/2017 в 15:07
источник пользователем

голоса
0

если ваша деятельность связана с первым состоянием ориентации устройства, получить ориентацию текущего устройства в 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);
        }
Ответил 22/09/2016 в 15:14
источник пользователем

голоса
0

В надежде, чтобы помочь кому-то еще, следующий атрибут на АКТИВНОСТИ в AndroidManifest.xml все, что вам нужно:

Android: configChanges = "ориентация"

Таким образом, полная активность узла:

<activity android:name="Activity1" 
    android:icon="@drawable/icon" 
    android:label="App Name" 
    android:configChanges="orientation">
Ответил 17/07/2013 в 23:53
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more