1

複数のビューを持つAndroidアプリがあります。android:configChanges="keyboardHidden|orientation|screenSize"アクティビティを宣言して、自動方向切り替えを無効にしました。

Q1)ビューを再度アクティブ化するにはどうすればよいonConfigurationChanged()ですか?setContentViewメソッドを使用してコンテンツビューをリセットする必要があるようです。レイアウトの横向き/縦向きバージョンを膨らませる必要があることをビューに通知する別の方法はありますか?states/modeless一部のビューには、いつでも表示される可能性のある非常に複雑なダイアログなどが含まれているため、ビューオブジェクトを削除して再インスタンス化すると、正しく聞こえません。

Q2)onConfigurationChanged()実際にアクティブにする必要があるビュー、つまり方向変更が開始されたときにフォーカスされたビューを知るための最良の方法は何ですか?getCurrentFocus()時々nullになる可能性があるので、私は頼りたくありません。

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 に答える