我有一个 PictureFragment,当从缩略图中选择图片时,我用它来全屏显示图片。它工作正常,但是当我旋转智能手机时,图片也会旋转并且缩放得非常难看,因此它的高度现在是它的实际宽度等等。如何关闭该片段的旋转?我总是阅读如何为整个活动执行此操作,但对于运行的其余活动,我想保持自动旋转。或者,如果这也很容易,我怎样才能在旋转时合理地缩放图片以保持其纵横比?
在您的
Fragment
内拨打onResume
以锁定纵向:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
然后在
onPause
解锁方向:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
OBS!为了方便起见,请在使用此方法之前使用
if(getActivity != null)
。
使用 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
的实例
添加到清单中
android:configChanges =“键盘隐藏|方向”
添加您的片段
@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);
}
}
}
@SuppressLint("SourceLockedOrientationActivity")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
//Rest of the code
}
override fun onDestroyView() {
super.onDestroyView()
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
}