1

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

Q1) 我应该如何重新激活视图onConfigurationChanged()?看来我需要使用setContentView方法重置内容视图。是否有另一种方式来表示视图,现在您应该为布局的横向/纵向版本充气?我的一些视图包含states/modeless可能随时出现的相当复杂的对话框等,因此删除视图对象并重新实例化它听起来并不正确。

onConfigurationChanged()Q2)了解我们现在应该实际激活哪个视图的最佳方法是什么,即在启动方向改变时关注的是什么?我不愿意依赖,getCurrentFocus()因为它有时可能为空。

4

1 回答 1

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

}
于 2012-03-28T11:08:45.763 回答