首页 > 解决方案 > 如何锁定屏幕以不允许在一个片段上旋转

问题描述

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

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

标签: androidandroid-sensorsscreen-orientation

解决方案


在我解决您的问题时发布作为答案。

根本问题是SCREEN_ORIENTATION_LANDSCAPE被使用而不是SCREEN_ORIENTATION_PORTRAIT

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


推荐阅读