关闭片段中的自动旋转

问题描述 投票:0回答:4

我有一个 PictureFragment,当从缩略图中选择图片时,我用它来全屏显示图片。它工作正常,但是当我旋转智能手机时,图片也会旋转并且缩放得非常难看,因此它的高度现在是它的实际宽度等等。如何关闭该片段的旋转?我总是阅读如何为整个活动执行此操作,但对于运行的其余活动,我想保持自动旋转。或者,如果这也很容易,我怎样才能在旋转时合理地缩放图片以保持其纵横比?

android android-fragments rotation
4个回答
41
投票

在您的

Fragment
内拨打
onResume
以锁定纵向:

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

然后在

onPause
解锁方向:

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

OBS!为了方便起见,请在使用此方法之前使用

if(getActivity != null)


3
投票

使用 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

的实例

0
投票

添加到清单中

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);
            }
        }       
}

0
投票
@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
}
© www.soinside.com 2019 - 2024. All rights reserved.