メニュー表示時のみステータスバーを表示する

以下のように、オプションメニュー表示次のみ画面上部のステータスバーが表示される。

オプションメニューを閉じる(戻るボタンなど)と、ステータスバーが非表示になる。


以下、ソース。

package hm.orz.chaos114.android.example;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;

public class ExampleActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// タイトルバーを非表示
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		hideStatusBar();

		setContentView(R.layout.main);
	}

	/**
	 * ステータスバーを非表示状態にします。
	 */
	private void hideStatusBar() {
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
	}

	/**
	 * ステータスバーを表示状態にします。
	 */
	private void showStatusBar() {
		getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// XMLファイルより表示内容の設定
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.menu, menu);
		return true;
	}

	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		showStatusBar();

		return super.onPrepareOptionsMenu(menu);
	}

	@Override
	public void onOptionsMenuClosed(Menu menu) {
		super.onOptionsMenuClosed(menu);

		hideStatusBar();
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.menu_stop:
			// 終了選択時
			finish();
			break;
		default:
			return false;
		}
		return true;
	}

}

まず、onCreateメソッドでタイトルバーを非表示に。
同時に、hideStatusBarを呼び出し、ステータスバーも非表示にします。

メニュー表示前にonPrepareOptionsMenuが呼ばれるので、その時にshowStatusBarを呼び出し、ステータスバーを表示状態に。

メニューが閉じられると(選択・戻るボタンなど)、onOptionsMenuClosedが呼ばれるので、hideStatusBarを呼び出し、ステータスバーを非表示状態に。