我有一个PictureFragment,用于从我的缩略图中选择全屏显示图片。它工作正常,但是当我旋转我的智能手机时,图片也会旋转并变得非常难看,因为它的高度现在是它的实际宽度等等。如何关闭此片段的旋转?我一直在阅读如何为整个活动做这件事但是对于剩下的活动而言,我希望保持自动旋转。或者,如果这也很容易,我怎样才能设法在旋转时刻意缩放图片以保持其宽高比?
我感谢任何帮助。
答案 0 :(得分:24)
在Fragment
onResume
内的getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
电话中锁定肖像:
onPause
然后在getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
解锁方向:
if(getActivity != null)
OBS!为此,请在使用此方法之前使用{{1}}。
答案 1 :(得分:1)
使用 Google 导航组件的简单解决方案:
在您的活动中:
navController.addOnDestinationChangedListener { _, destination, _ ->
if (destination.id == R.id.fragmentB) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
} else if (requestedOrientation != ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
}
}
此逻辑会将“fragmentB”(导航图中的 Id 资源)的屏幕方向锁定为纵向。
navController
是 androidx.navigation.NavController
答案 2 :(得分:0)
添加清单
android:configChanges =“ keyboardHidden | orientation”
添加片段
@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);
}
}
}