日付を取得するための月ビューを含むポップアップ ウィンドウを作成しました。向きを変えると、Android が再びアクティビティをロードするため、ポップアップ ウィンドウが消えます。実行時に向きが変わっても開くにはどうすればよいですか?
4 に答える
アクティビティ表示ウィンドウにAndroidManifest.xmlを含めandroid:configChanges="orientation"
ます。これを行うと、向きの変更を自分で処理することをAndroidに伝え、最終的にはアクティビティを破棄せず、ウィンドウを表示したままにします。
この手法は、縦向きモードと横向きモードでレイアウトが異なる場合に適しています。ただし、その場合でも、以下のように方向モードを検出することにより、カスタム レイアウトの実装を実行できます。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
Log.i("orientation", "Orientation changed to: Landscape");
else
Log.i("orientation", "Orientation changed to: Portrait");
}
プレビューするには、このサンプル アプリをダウンロードしてインストールします。
向きが変わるたびに、Android はアクティビティを破棄し ( 呼び出しonDestroy()
)、その後再起動します ( 呼び出しonCreate()
)。
ポップアップが表示されたらすぐに、フラグを設定しますpopup_open=1
。ポップアップには当然、閉じるボタンがあります。このボタンのクリック ハンドラで flag=0 を設定します。onRestoreInstanceState()
メソッドまたは でアプリを再起動すると、ポップアップを再度開くことができますonCreate()
。ここでは、フラグのチェックを行います。フラグが 1 に設定されている場合は、ポップアップを表示します。そのため、ポップアップが表示されている間に方向が変わったとしてもonRestoreInstanceState()
、フラグの状態に基づいて何をすべきかがわかります。詳細な参照チェック: How to handle runtime changes。
このプロパティを manifest.xml のアクティビティに追加します
android:configChanges="orientation|keyboard"
そして、それはそれを行う必要があります。