2012/03/25

Android:ActionBarに一瞬表示されるタイトルを非表示にする方法

アクションバーにタブを表示し、ホームとタイトルを非表示にした下記のような画面を
作成する場合、

特に何も指定しないと、アプリ起動時に一瞬タイトルが表示されてしまいます。

これを防ぐには、ホーム(アプリアイコン)とタイトルの非表示をStyleリソースで指定す
るととうまくいきます。

<resources>
    <style name="TopPageTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/TopPageStyle</item>
    </style>

    <style name="TopPageStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:navigationMode">tabMode</item>
        <item name="android:displayOptions"></item>
    </style>
</resources>

詳細を下記に記載します。

Fragmentが導入されて以降、TabHostが廃止となりました。
そのため、Android3.0以降でタブを実現したい場合はActionBarのナビゲーションモード
にタブモードを設定する必要があります。

・ナビゲーションモードにタブモードを設定するコード
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

ナビゲーションモードにタブモードを設定すると下記のような画面構成になりますが、

ハンドセットでタイトルとタブが並ぶのは不恰好に見え、画面領域が勿体ないので、
タイトル部分を非表示にすることがよくあります。

タイトル部分を非表示にしたい場合はホームとタイトルを非表示に設定します。
・ホームとタイトルを非表示するコード
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);

これを実行すると、期待通りタイトルが非表示でタブだけが表示される画面になりました。


しかし、このアプリを起動すると一瞬、非表示にしたはずのタイトル部分が表示されます。

一瞬とはいえ、これでは少々不恰好です。
タイトルを一瞬でも表示されないようにするには、ホームとタイトルの非表示指定を
Styleリソースに定義し、Activityのテーマとしてこれを読み込みます。

Styles.xml
<resources>
    <style name="TopPageTheme" parent="android:Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/TopPageStyle</item>
    </style>

    <style name="TopPageStyle" parent="android:Widget.Holo.Light.ActionBar">
        <item name="android:navigationMode">tabMode</item>
        <item name="android:displayOptions"></item>
    </style>
</resources>

AndroidManifest.xml
<activity
        android:theme="@style/TopPageTheme"
        ... >

こうすることで、起動時にタイトルが表示されることはなくなります。
しかし、アクションバーの下線部はまだ一瞬表示されてしまいます。

アクションバー下線部はAndroid標準のアプリでも同様に表示されるため、非表示にする
のが困難な可能性があります。
非表示とする方法については、わかり次第追記します。

以上です。