Как отобразить любую часть макета в полноэкранном ландшафтном режиме одним нажатием кнопки? - PullRequest
0 голосов
/ 20 января 2020

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

  requireActivity().requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

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

Ответы [ 3 ]

0 голосов
/ 20 января 2020

Я использовал

android: configChanges = "клавиатура скрытая | ориентация | размер экрана"

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

В методе onResume() фрагмента я вызываю

getActivity (). SetRequestedOrientation (ActivityInfo .SCREEN_ORIENTATION_LANDSCAPE);

и в onPause() я вызываю

getActivity (). SetRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

* 1022 Надеюсь, это поможет вам!
0 голосов
/ 20 января 2020

Поместите этот код в свою деятельность, в которой вы хотите вращение

android:configchanges="orientation"

Переопределите метод onConfigurationChanged в деятельности и вставьте следующий код. Обязательно получите фрагмент, в котором вы хотите повернуть упражнение. Это просто базовый код, вы можете добавить свою логику c, как вам нравится, или вы можете изменить ее, как хотите.

@Override
    public void onConfigurationChanged(Configuration newConfig) {

        if (checkFragmentForRotation()) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }else{
            setRequestedOrientation(Configuration.ORIENTATION_PORTRAIT); // otherwise lock in portrait
        }
        super.onConfigurationChanged(newConfig);
    }

    private boolean checkFragmentForRotation() {
        //find your fragment by tag or by any other means
        Fragment fr = getSupportFragmentManager().findFragmentByTag(
                <Tag of your fragment here>);

        return (fr != null && fr.isResumed() && fr.getClass().isInstance(<YourFragment>.class));
    }
0 голосов
/ 20 января 2020

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

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

...