kurukuru-papaのブログ

主に、ソフトウェア開発に関連したメモを書き溜めたいと思います。

アクティビティを全画面表示する方法

Androidアプリで画面表示周りを作っていました。アクティビティを全画面表示すること自体は簡単に出来たのですが、全画面表示する際、一瞬だけタイトルバーが表示されていました。タイトルバーをまったく表示しないで、全画面表示する方法をメモしておきます。

概要

ここで言う「全画面表示」とは、アクティビティのタイトルバーを非表示にし、ステータスバー(アンテナ強度や時刻が表示されているエリア)を隠すことを指しています。実現方法は、大きく次の二通りがありました。

  1. AndroidManifest.xmlでテーマを設定する。
  2. アクティビティのonCreateメソッドで設定する。

AndroidManifest.xmlでテーマを設定する方法では、上述した一瞬だけタイトルバーが表示される現象は起きませんでした。アクティビティのonCreateメソッドで制御を行う場合だけ、一瞬タイトルバーが表示されました。

onCreateメソッドでタイトルバーの制御を行う場合、制御を行なっている途中でも、端末上では画面が表示されていました。このときの画面は、AndroidManifest.xmlで設定されている内容です。AndroidManifest.xmlでタイトルバーの設定を何も書いていなければ、onCreateメソッドの処理中、タイトルバー付きの画面が表示されました。onCreateメソッドでタイトルバーの制御を行う場合でも、AndroidManifest.xmlにタイトルバーの設定を行ったほうが良いようです。

AndroidManifest.xmlのテーマ設定で全画面表示する方法

画面イメージは次のようになります。さっぱりしすぎて分かりにくいのですが、タイトルバーもステータスバーもありません。

アクティビティに対するテーマの適用は、AndroidManifest.xmlで、activityタグのandroid:theme属性で行います。以下に抜粋しました。ここではAndroidで用意されている「Theme.NoTitleBar.Fullscreen」というテーマ(タイトルバーなし&全画面表示)を指定しています。

        <activity
            android:name=".ThemeNoTitleActivity"
            android:label="TryAndroidUI002 ThemeNoTitle"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

上記のAndroidManifest.xmlの指定だけで、アクティビティクラスで何もしなくても、全画面表示が出来ます。ですが、ここでは、アクティビティ表示時に、タイトルバーがまったく表示されないのを確認するため、アクティビティクラスにスリープ処理を追加しています。

public class ThemeNoTitleActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// 親クラスのonCreate()を呼ぶ前にスリープを入れて、表示状態を確認する。
		sleep(1000);
		super.onCreate(savedInstanceState);

		// レイアウト設定
		setContentView(R.layout.activity);

		// コンテンツ設定
		TextView textView = (TextView) findViewById(R.id.textView1);
		textView.setText(getResources().getString(R.string.hello));
	}

	private void sleep(long time) {
		try {
			Thread.sleep(time);
		} catch (InterruptedException e) {
			Log.d(getClass().getName(), getClass().getSimpleName()
					+ "#onCreate()," + e.getMessage());
		}
	}
}

AndroidManifest.xmlでテーマを利用した全画面表示の手順は、以上で終わりです。

アクティビティのonCreateメソッドで全画面表示する方法

画面イメージは次のようになります。こちらも、さっぱりしすぎて分かりにくいのですが、タイトルバーもステータスバーもありません。AndroidManifest.xmlでテーマを利用した方法と、同じ画面表示になっています。

アクティビティクラスでは、onCreateメソッドで、getWindow().addFlags()とrequestWindowFeature()の記述しています。この2行をsetContentView()の前に記述する事がポイントらしいです。ここでも、アクティビティ表示時にタイトルバーがまったく表示されないのを確認するため、スリープ処理を追加しています。

public class NoTitleActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// 親クラスのonCreate()を呼ぶ前にスリープを入れて、表示状態を確認する。
		sleep(1000);
		super.onCreate(savedInstanceState);

		// setContentView()呼び出し前に、タイトルバーなし設定を行う
		getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
		requestWindowFeature(Window.FEATURE_NO_TITLE);

		// レイアウト設定
		setContentView(R.layout.activity);

		// コンテンツ設定
		TextView textView = (TextView) findViewById(R.id.textView1);
		textView.setText(getResources().getString(R.string.hello));
	}

	private void sleep(long time) {
		try {
			Thread.sleep(time);
		} catch (InterruptedException e) {
			Log.d(getClass().getName(), getClass().getSimpleName()
					+ "#onCreate()," + e.getMessage());
		}
	}
}

上述のアクティビティに対するAndroidManifest.xmlは、次のように定義します。android:theme属性で、Android標準の@android:style/Theme.NoTitleBarを設定し、初期表示の状態でタイトルバーを非表示にしています。もし、android:theme属性を設定しないと、デフォルト設定でタイトルバーありとして動作することになるため、画面表示時に一瞬だけタイトルバーが見えてしまいます。

        <activity
            android:name=".NoTitleActivity"
            android:label="TryUI002 NoTitle"
            android:theme="@android:style/Theme.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

以上で、アクティビティクラス側での全画面表示が出来ました。

動作環境

Android OS:Version 2.1
端末:Xperia SO-01B

参照

次のページを参考にさせて頂きました。