解锁设备时onConfigurationsChanged不首次调用

时间:2018-06-29 10:34:47

标签: android orientation lockscreen

我正在开发一个根据设备方向更改部分布局的应用程序。我正在使用

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

将我的活动设置为根据设备传感器自动旋转。我的 onConfigurationsChanged 方法

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    if (controllerView != null) {
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            // Load Landscape Layout 
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            // Load Portrait Layout
        }
    }
}

AndroidManifest:

<activity
        android:name=".MyActivity"
        android:configChanges="keyboardHidden|orientation|screenSize" />

问题:

onConfigurationsChanged每次设备方向更改时都可以正常工作,但是问题是,假设设备处于横向模式,并且锁定了屏幕,然后再次解锁屏幕时,如果现在我将设备启用横向模式,则设备会自动变为纵向模式模式下,屏幕旋转,但不会调用onConfigurationsChanged(),因此在横向模式下将显示纵向模式布局。

1 个答案:

答案 0 :(得分:1)

如果您针对不同的方向使用不同的布局,则应该在your_activity_layout.xmllayout文件夹中包含layout-land个文件。

layout/your_activity_layout.xml->用于纵向模式;

layout-land/your_activity_layout.xml->用于横向模式;

此外,setContentView(R.layout.your_activity_layout)应该只写在onCreate下的活动的super.onCreate(savedInstanceState)方法内

最后,您应该从清单中删除android:configChanges="keyboardHidden|orientation|screenSize",以便让MyActivity在每次方向更改时重新创建自己。

此后,每次调用onCreate方法时(每次更改方向后都会被调用)R.layout.your_activity_layout适用于当前方向。