Как установить приложение в портретном режиме?



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

317   14  

14 ответов:

для любой версии Android

из XML

вы можете указать android:screenOrientation="portrait" для каждого действия в манифесте.XML-файл. Вы не можете указать этот параметр на application - тег.

От Java

другой вариант - сделать это программно, например в Activity базовый класс:

@Override
public void onCreate(Bundle savedInstanceState) {
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

для Android 4+ (API 14+)

последний вариант-сделать это с прослушивателями жизненного цикла активности, которые доступны только с Android 4.0 (API 14+). Все происходит в обычае Application класс:

@Override
public void onCreate() {
    super.onCreate();  
    registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
        @Override
        public void onActivityCreated(Activity a, Bundle savedInstanceState) {
            a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });
}

ActivityLifecycleAdapter это просто вспомогательный класс, который вам нужно будет создать, который будет пустой реализацией ActivityLifecycleCallbacks (поэтому вам не нужно переопределять все методы этого интерфейса, когда вам просто нужен один из них).

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

public abstract class AbstractActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

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

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

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

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

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

            }

            ....

        });

    }
}

Вы можете установить это в ваш файл манифеста..

android:name=".your launching activity name"
android:screenOrientation="portrait"

и вы также можете достичь того же, написав код в файле класса, например:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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

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

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

android:screenOrientation="portrait" 

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

запишите это в файл манифеста, для каждого действия:

android:screenOrientation="portrait" 

как из руководства для разработчиков Android :

"ориентация" ориентация экрана изменилась - пользователь повернул устройство. Примечание: если ваше приложение нацелено на уровень API 13 или выше (как объявлено minSdkVersion и targetSdkVersion атрибуты), то вы также должны объявить "screenSize" конфигурация, потому что она также изменяется, когда устройство переключается между портретная и ландшафтная ориентации.

"screenSize" ток доступный размер экрана изменился. Этот представляет собой изменение в существующих в настоящее время размер, относительно текущее соотношение сторон, поэтому будет меняться, когда пользователь переключается между пейзаж и портрет. Однако, если ваше приложение нацелено на уровень API 12 или ниже, то ваша деятельность всегда обрабатывает эту конфигурацию измените себя (это изменение конфигурации не перезапускает ваш активность, даже при работе на Android 3.2 или выше устройства). Добавлен на уровне API 13.

Итак, в AndroidManifest.XML-файл, мы можем поставить:

<activity
            android:name=".activities.role_activity.GeneralViewPagerActivity"
            android:label="@string/title_activity_general_view_pager"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            >
        </activity> 

добавлять <preference name="orientation" value="portrait" /> под <widget> в моей конфигурации.xml работал на меня.

(другие решения либо не работали на моем устройстве, были перезаписаны во время сборки, либо давали ошибки устаревания во время процесса сборки.)

в файле манифеста, какое действие вы хотите использовать в "портрет" вы должны написать этот код в теге активности

  android:screenOrientation="portrait" 

такой

         android:icon="@drawable/icon"
        android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity" 
        android:screenOrientation="portrait" >

но если вы хотите экран в ландшафте использовать этот код, как это

android:screenOrientation="landscape"

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

class InteractiveStoryApplication: Application() {
override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
        override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
            activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        }

        override fun onActivityPaused(activity: Activity?) {
        }

        override fun onActivityResumed(activity: Activity?) {
        }

        override fun onActivityDestroyed(activity: Activity?) {
        }

        override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
        }

        override fun onActivityStarted(activity: Activity?) {
        }

        override fun onActivityStopped(activity: Activity?) {
        }
    })
}
}

и затем вы должны добавить свой общий базовый класс в AndroidManifest, как так:

<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"

Вы можете сделать это двумя способами .

  1. добавить android:screenOrientation="portrait" в файле манифеста, чтобы соответствующая деятельность
  2. добавить setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); вашей деятельности в методе onCreate ()

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

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

и расширить этот класс вместо AppCompatActivity, где вы хотите использовать режим Potrait

public class your_activity extends BaseActivity {}

в вашем Манифесте введите это:

<activity
    android:screenOrientation="portrait"
    <!--- Rest of your application information ---!>
</activity>

Comments

    Ничего не найдено.