Как я могу получить текущую ориентацию экрана?

Я просто хочу установить несколько флагов, когда моя ориентация находится в ландшафте, так что когда активность воссоздается в onCreate(), я могу переключаться между тем, что нужно загружать в портрете или пейзаже. У меня уже есть xml, который обрабатывает мой макет.

public void onConfigurationChanged(Configuration _newConfig) {

        if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            this.loadURLData = false;
        }

        if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            this.loadURLData = true;
        }

        super.onConfigurationChanged(_newConfig);
    }

Over-riding onConfigurationChanged предотвратит загрузку xml-страницы в альбомной ориентации.

Я просто хочу получить текущую ориентацию своего устройства в onCreate(). Как я могу получить это?

Ответ 1

Activity.getResources().getConfiguration().orientation

Ответ 2

int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    // code for portrait mode
} else {
    // code for landscape mode
}

Когда суперкласс this Context

Ответ 3

В некоторых устройствах void onConfigurationChanged() может произойти сбой. Пользователь будет использовать этот код для получения текущей ориентации экрана.

public int getScreenOrientation()
{
    Display getOrient = getActivity().getWindowManager().getDefaultDisplay();
    int orientation = Configuration.ORIENTATION_UNDEFINED;
    if(getOrient.getWidth()==getOrient.getHeight()){
        orientation = Configuration.ORIENTATION_SQUARE;
    } else{ 
        if(getOrient.getWidth() < getOrient.getHeight()){
            orientation = Configuration.ORIENTATION_PORTRAIT;
        }else { 
             orientation = Configuration.ORIENTATION_LANDSCAPE;
        }
    }
    return orientation;
}

И используйте

if (orientation==1)        // 1 for Configuration.ORIENTATION_PORTRAIT
{                          // 2 for Configuration.ORIENTATION_LANDSCAPE
   //your code             // 0 for Configuration.ORIENTATION_SQUARE
}

Ответ 4

int rotation =  getWindowManager().getDefaultDisplay().getRotation();

, это даст всю ориентацию, как обычный и обратный

и обрабатывать его как

int angle = 0;
switch (rotation) {
    case Surface.ROTATION_90:
        angle = -90;
        break;
    case Surface.ROTATION_180:
        angle = 180;
        break;
    case Surface.ROTATION_270:
        angle = 90;
        break;
    default:
        angle = 0;
        break;
}

Ответ 5

getActivity().getResources().getConfiguration().orientation

эта команда возвращает значение int 1 для Portrait и 2 для Landscape

Ответ 7

В вашем классе активности используйте следующий метод:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            setlogo();// Your Method
            Log.d("Daiya", "ORIENTATION_LANDSCAPE");

        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

            setlogoForLandScape();// Your Method
            Log.d("Daiya", "ORIENTATION_PORTRAIT");
        }
    }

Затем, чтобы объявить, что ваша активность обрабатывает изменение конфигурации, отредактируйте соответствующий элемент в файле манифеста, чтобы включить атрибут android:configChanges со значением, представляющим конфигурацию, которую вы хотите обработать. Возможные значения перечислены в документации для атрибута android:configChanges (наиболее часто используемые значения - это "ориентация", чтобы предотвратить перезагрузку при изменении ориентации экрана и "клавиатура", чтобы предотвратить перезагрузку при изменении доступности клавиатуры). Вы можете объявить несколько значений конфигурации в атрибуте, разделив их на канал | характер.

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

Что все!!

Ответ 8

если вы хотите переопределить этот метод onConfigurationChanged и все еще хотите, чтобы он выполнял базовый материал, тогда рассмотрите возможность использования super.onConfigyrationChanged() в качестве первого выражения в методе overriden.

Ответ 9

Я просто хочу предложить другую альтернативу, которая затронет некоторых из вас:

android:configChanges="orientation|keyboardHidden" 

подразумевает, что мы явно объявляем макет для внедрения.

В случае, если мы хотим сохранить автоматический впрыск благодаря папкам layout-land и layout. Все, что вам нужно сделать, это добавить его в onCreate:

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();

    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getSupportActionBar().show();
    }

Здесь мы показываем или нет панель действий в зависимости от ориентации телефона