Android 解锁设备时,OnConfiguration更改为首次不调用

Android 解锁设备时,OnConfiguration更改为首次不调用,android,orientation,lockscreen,Android,Orientation,Lockscreen,我正在开发一个应用程序,它可以根据设备方向改变部分布局。我正在使用 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 根据设备传感器将我的活动设置为自动旋转。我的配置更改方法 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig);

我正在开发一个应用程序,它可以根据设备方向改变部分布局。我正在使用

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
根据设备传感器将我的活动设置为自动旋转。我的配置更改方法

@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" />

问题:

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

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

如果您有不同方向的不同布局,您应该在
layout
layout land
文件夹中包含
活动\u layout.xml
文件

layout/your\u activity\u 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。您的\u活动\u布局
适合当前方向