关闭片段中的自动旋转

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 资源)的屏幕方向锁定为纵向。

navControllerandroidx.navigation.NavController

的实例