Android 禁用片段中的自动旋转
我有一个PictureFragment,当我从缩略图中选择图片时,我使用它全屏显示图片。它工作得很好,但当我旋转我的智能手机时,图片也会旋转,缩放得非常难看,所以它的高度现在是它的实际宽度,等等。如何关闭此碎片的旋转?我一直在阅读如何在整个活动中执行此操作,但在其他活动中,我希望保持自动旋转。或者,如果这也很容易实现,我如何能够在旋转时对图片进行有意义的缩放以保持其纵横比?在Android 禁用片段中的自动旋转,android,android-fragments,rotation,Android,Android Fragments,Rotation,我有一个PictureFragment,当我从缩略图中选择图片时,我使用它全屏显示图片。它工作得很好,但当我旋转我的智能手机时,图片也会旋转,缩放得非常难看,所以它的高度现在是它的实际宽度,等等。如何关闭此碎片的旋转?我一直在阅读如何在整个活动中执行此操作,但在其他活动中,我希望保持自动旋转。或者,如果这也很容易实现,我如何能够在旋转时对图片进行有意义的缩放以保持其纵横比?在片段中调用insideonResume以锁定到纵向: getActivity().setRequestedOrientat
片段中
调用insideonResume
以锁定到纵向:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
然后在onPause
中解锁方向:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
OBS!为了方便起见,请在使用此方法之前使用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);
}
}
}
使用谷歌导航组件的简单解决方案: 在您的活动中:
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
的一个实例,最好将方向设置为您的活动
。我只有一个activityy,可以通过fragmentmanager在屏幕之间切换。为什么我对这个问题不感兴趣?我想这可能会回答你的问题:谢谢。另一个问题:使用很少的活动(一个或两个)并使用片段管理器进行大量的屏幕更改是否有意义?还是在每个屏幕上都使用一个活动更好?@MD它有点旧了,但是如果你只使用一个活动呢?如果我从FragmentA(横向模式)导航到FragmentB(从顶部包含portait锁逻辑),我发现自己处于一个无休止的活动重启循环中