我有一个有多个视图的Android应用程序。我通过为我的活动声明android:configChanges="keyboardHidden|orientation|screenSize"
来禁用自动方向切换。
Q1)我应该如何重新激活onConfigurationChanged()
中的观看次数?我似乎需要使用setContentView
方法重置内容视图。是否有另一种方式来发出信号视图,现在你应该为布局的横向/纵向版本充气?我的一些视图包含非常复杂的states/modeless
对话框等,可以随时出现,因此删除视图对象并重新实例化它听起来不对。
Q2} onConfigurationChanged()
中最好的方法是知道我们现在应该实际激活哪个视图,即启动方向更改时的重点是什么?我不愿意依赖getCurrentFocus()
因为它有时可能为空。
答案 0 :(得分:1)
Q1)我应该如何在onConfigurationChanged()中重新激活视图?
正如您所提到的,setContentView()
是一种很好的方法。请记住,并不总是将布局XML传递给此方法。相反,将布局预膨胀为View
对象,并将该View对象传递给setContentView。这样,在每次方向更改时都不会产生重新创建视图对象的成本。
以下是示例代码 - 可能无法正常工作;但意在说明我的观点。
View mLandscapeView;
View myPortraitView
protected void onCreate(Bundle bundle){
View myLandscapeView = getLayoutInflater().inflate(R.layout.my_landscape, null);
View myPortraitView = getLayoutInflater().inflate(R.layout.my_portrait, null);
//...
}
@Override
protected void onConfigurationChanged(Configuration config){
if(config.orientation = Configuration.ORIENTATION_LANDSCAPE){
//adjust mLandscapeView as needed
setContentView(mLandscapeView);
}
// And so on ...
}