我正在开发一个应用程序,它根据设备方向更改布局的一部分 . 我正在使用
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" />
Problem:
onConfigurationsChanged在每次设备方向改变时工作正常但问题是,假设设备处于横向模式并且我锁定屏幕然后当我再次解锁屏幕时设备现在自动转为纵向模式如果我将设备转为启用横向模式,屏幕旋转,但onConfigurationsChanged()不调用,因此纵向模式布局以横向模式显示 .
1 回答
如果您有不同方向的不同布局,则应在
layout
和layout-land
文件夹中包含your_activity_layout.xml
文件 .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
适用于当前方向 .