我正在开发一个根据设备方向更改部分布局的应用程序。我正在使用
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(),因此在横向模式下将显示纵向模式布局。
答案 0 :(得分:1)
如果您针对不同的方向使用不同的布局,则应该在your_activity_layout.xml
和layout
文件夹中包含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
适用于当前方向。