关闭片段中的自动旋转

时间:2015-04-14 09:26:50

标签: android android-fragments rotation

我有一个PictureFragment,用于从我的缩略图中选择全屏显示图片。它工作正常,但是当我旋转我的智能手机时,图片也会旋转并变得非常难看,因为它的高度现在是它的实际宽度等等。如何关闭此片段的旋转?我一直在阅读如何为整个活动做这件事但是对于剩下的活动而言,我希望保持自动旋转。或者,如果这也很容易,我怎样才能设法在旋转时刻意缩放图片以保持其宽高比?

我感谢任何帮助。

3 个答案:

答案 0 :(得分:24)

Fragment onResume内的getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 电话中锁定肖像:

onPause

然后在getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); 解锁方向:

if(getActivity != null)

OBS!为此,请在使用此方法之前使用{{1}}。

答案 1 :(得分:1)

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

navControllerandroidx.navigation.NavController

的一个实例

答案 2 :(得分:0)

添加清单

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