У меня есть PictureFragment, который я использую, чтобы показать изображение в полноэкранном режиме при выборе его из моего эскиза. Он работает нормально, но когда я поворачиваю свой смартфон, изображение также поворачивается и масштабируется очень некрасиво, так что его высота теперь равна его фактической ширине и так далее. Как я могу отключить вращение для этого фрагмента? Я всегда читал, как это сделать для всей деятельности, но для остальной части этой работы я хочу сохранить автоматический поворот. Или, если это также легко возможно, как я могу разумно масштабировать изображение при вращении, чтобы сохранить его соотношение сторон?
Отключить автоматическое вращение в фрагменте
Ответ 1
В своем Fragment
вызове внутри onResume
, чтобы заблокировать портрет:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
затем в onPause
, чтобы разблокировать ориентацию:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
OBS! Для этого используйте if(getActivity != null)
перед использованием этих методов.
Ответ 2
Добавить в манифест
андроид: configChanges = "keyboardHidden | ориентация"
добавить в свой фрагмент
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (getActivity() != null) {
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
}