Автоповорот не работает после setRequestedOrientation при нажатии кнопки

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

Вот скриншот моего просмотра видео и контроллера.

введите описание изображения здесь Вот мой код для полноэкранной кнопки на ClickEvent

mFullScreen.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
                //To fullscreen
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                mFullScreen.setImageResource(R.drawable.fullscreen);
                toolbar.setVisibility(View.VISIBLE);
                updateMetadata(false);

            } else {

                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                getSupportActionBar().hide();
                mFullScreen.setImageResource(R.drawable.normal_screen);
                toolbar.setVisibility(View.INVISIBLE);
                updateMetadata(true);
            }
        }
    });

Вот мой onConfiguration измененный метод

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

    getSupportActionBar().show();
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();
        toolbar.setVisibility(View.INVISIBLE);
        try {
            channelNameText.setVisibility(View.GONE);
            channelImage.setVisibility(View.GONE);
        } catch (NullPointerException ne) {
            ne.printStackTrace();
        }

        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
        }
        updateMetadata(false);

    } else {

        Logger.e("Orientation", "ORIENTATION_POTRAIT");

        try {
            channelNameText.setVisibility(View.VISIBLE);
            channelImage.setVisibility(View.VISIBLE);
        } catch (NullPointerException ne) {
            ne.printStackTrace();
        }

        mFullScreen.setImageResource(R.drawable.fullscreen);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        getWindow().clearFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
        }
        updateMetadata(true);
    }
}

Метод onConfiguration вызывается, но только когда мы нажимаем полноэкранную кнопку. Как включить автоматическое вращение после setRequestedOrientation?

1 ответ

Если вы хотите изменить режим ориентации своей деятельности в любое время в соответствии с вашими требованиями, то ниже приведен код Java для того же. Поскольку мы обсуждаем все режимы ориентации экрана Android выше, мы можем установить любой из режимов в любое время из кода Java. Ниже приведен пример для альбомного и портретного режима. Но вы можете установить все доступные режимы одинаково. поместите приведенные ниже строки кода в любое место вашего Java-файла активности, где вы хотите изменить ориентацию экрана своей деятельности. Например, если вы хотите установить определенную ориентацию перед отображением экрана, вы можете добавить код в функцию onCreate() вашей активности.

Для ландшафтного режима

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Для портретного режима

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Примечание. При добавлении этого кода не забудьте импортировать пакет import android.content.pm.ActivityInfo; в ваш код.

Иногда вы хотите получить программную ориентацию текущего экрана во время выполнения. Чтобы получить то же самое, вы можете попробовать приведенный ниже Java-код в вашем файле activity.java.

//Get current screen orientation
        Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
        int orientation = display.getOrientation(); 
         switch(orientation) {
            case Configuration.ORIENTATION_PORTRAIT:
                setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                break;
            case Configuration.ORIENTATION_LANDSCAPE:
                setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                break;                  
        }

Примечание: не забудьте импортировать ниже пакеты для вышеуказанного кода.

import android.view.Display;
import android.content.res.Configuration;
import android.view.WindowManager;
Другие вопросы по тегам