Автоповорот не работает после 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;