如何锁定屏幕以不允许在一个片段上旋转

How to lock the screen to not allow rotate at one fragment

有一个寻呼机片段,当一个片段被滚动时,希望它被锁定在纵向模式,而其他片段应该允许旋转。

override fun onPageSelected(position: Int) {
    val item = getDataItem(position)   
    if (item is SpecialItem) {

        if (context?.resources?.configuration?.orientation == Configuration.ORIENTATION_PORTRAIT) {
            activity?.requestedOrientation = ActivityInfo.ORIENTATION_PORTRAIT

            // or tried activity?.requestedOrientation = ActivityInfo.ORIENTATION_PORTRAIT

           // or tried activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED

        }


    } else {
        activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
    } 
......
}

但是在

的调用之后
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

它仍然可以旋转屏幕。

这里锁屏的正确方法是什么?

有什么区别
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR

activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR

activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_FULL_USER

更新

感谢 JensV 指出这是一个打字错误,它应该在 ORIENTATION_PORTRAIT 那里并且它正在工作。

现在的问题只是有什么区别,应该使用

activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED

activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT

// or activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

我解决了你的问题,作为答案发布。

根本问题是 SCREEN_ORIENTATION_LANDSCAPE 而不是 SCREEN_ORIENTATION_PORTRAIT

第二个问题的答案:我会选择 SCREEN_ORIENTATION_UNSPECIFIED,它将重置为未设置任何特定内容。