Android视图和自定义方向更改,最好的处理方式是什么?

时间:2012-03-28 10:49:11

标签: android android-layout android-orientation

我有一个有多个视图的Android应用程序。我通过为我的活动声明android:configChanges="keyboardHidden|orientation|screenSize"来禁用自动方向切换。

Q1)我应该如何重新激活onConfigurationChanged()中的观看次数?我似乎需要使用setContentView方法重置内容视图。是否有另一种方式来发出信号视图,现在你应该为布局的横向/纵向版本充气?我的一些视图包含非常复杂的states/modeless对话框等,可以随时出现,因此删除视图对象并重新实例化它听起来不对。

Q2} onConfigurationChanged()中最好的方法是知道我们现在应该实际激活哪个视图,即启动方向更改时的重点是什么?我不愿意依赖getCurrentFocus()因为它有时可能为空。

1 个答案:

答案 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 ... 

}