Неправильная высота экрана после setRequestedOrientation - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь заставить мой макет быть в альбомной ориентации для планшетов, поэтому у меня есть этот код:

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Но если я немедленно вызову getResources (). GetDisplayMetrics (). WidthPixels после этого вызова, он возвращает высоту планшета, а не ширину. Только после того, как onConfigurationChanged вызван, я начинаю получать правильную высоту, которая происходит после того, как мой основной макет надувается с использованием неправильных размеров экрана.

Я пытался сделать это после setRequestedOrientation:

DisplayMetrics dm = getResources().getDisplayMetrics();
int height = dm.heightPixels;
int width = dm.widthPixels;
dm.heightPixels = width;
dm.widthPixels = height;
getResources().updateConfiguration(getResources().getConfiguration(), dm);

Хотя это не помогло.

Как правильно обращаться с этой ситуацией?

P. S. Несмотря на то, что я установил ориентацию на SCREEN_ORIENTATION_LANDSCAPE, я продолжаю получать SCREEN_ORIENTATION_USER после внесения изменений. Почему это так?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Дело в том, что ваш код вычисляет ширину и высоту до установки макета.Существует вещь под названием ViewTreeObserver, которая позволяет вычислять только после установки макета.

Пример кода

final LinearLayout layout = (LinearLayout) findViewById(R.id.YOUR_VIEW_ID);
ViewTreeObserver vto = layout.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener (new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() {
        layout.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
        int width  = layout.getMeasuredWidth();
        int height = layout.getMeasuredHeight(); 

    } 
});
0 голосов
/ 26 июня 2018

Вы добавили android:configChanges="keyboardHidden|orientation|screenSize" в свой тег активности в манифесте?Если нет, пожалуйста, добавьте и попробуйте снова

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...