关闭片段中的自动旋转
Turn off auto rotation in fragment
我有一个 PictureFragment,当从我的缩略图中选择图片时,我用它来全屏显示图片。它工作正常,但是当我旋转我的智能手机时,图片也会旋转并且缩放得非常难看,以至于它的高度现在是它的实际宽度等等。如何关闭此片段的旋转?我一直在阅读如何为整个 activity 执行此操作,但对于运行的 activity 的其余部分,我想保持自动旋转。或者,如果这也很容易实现,我怎样才能在旋转时合理地缩放图片以保持其纵横比?
在你的 Fragment
调用中 onResume
锁定纵向:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
然后在onPause
解锁方位:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
天啊!为此,请在使用此方法之前使用 if(getActivity != null)
。
在清单中添加
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);
}
}
}
使用 Google 导航组件的简单解决方案:
在你的Activity中:
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
的实例
我有一个 PictureFragment,当从我的缩略图中选择图片时,我用它来全屏显示图片。它工作正常,但是当我旋转我的智能手机时,图片也会旋转并且缩放得非常难看,以至于它的高度现在是它的实际宽度等等。如何关闭此片段的旋转?我一直在阅读如何为整个 activity 执行此操作,但对于运行的 activity 的其余部分,我想保持自动旋转。或者,如果这也很容易实现,我怎样才能在旋转时合理地缩放图片以保持其纵横比?
在你的 Fragment
调用中 onResume
锁定纵向:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
然后在onPause
解锁方位:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
天啊!为此,请在使用此方法之前使用 if(getActivity != null)
。
在清单中添加
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);
}
}
}
使用 Google 导航组件的简单解决方案:
在你的Activity中:
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