ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

Android アプリの Action bar に独自 View を設定する

ActionBar#setCustomView メソッド

Action bar に独自ビューを設定するには、ActionBar#setCustomView メソッドを使用する。

このメソッドを呼び出すだけでは独自ビューが表示されない。 独自ビューが表示されるようにするために、DISPLAY_SHOW_CUSTOM オプションを有効にする必要がある。 また、独自ビューを設定しただけでは、通常表示されるタイトル部分 (?) も合わせて表示されるので、タイトル部分を表示しないように設定する必要もある。 (詳しくは下に書いている例を参考のこと。)

API ドキュメントを見ると次のように書かれているので、この独自ビューは、独自のナビゲーションを実現するためのもののようである。

Set the action bar into custom navigation mode, supplying a view for custom navigation.

Custom navigation views appear between the application icon and any action buttons and may use any space available there. Common use cases for custom navigation views might include an auto-suggesting address bar for a browser or other navigation mechanisms that do not translate well to provided navigation modes.

下の例では DISPLAY_SHOW_CUSTOM オプションを有効にするために setDisplayOptions メソッドを使っているが、他のオプションの値もまとめて設定したい、という場合でなければ setDisplayShowCustomEnabled(boolean) メソッド を使った方が手軽で良さそう。


素の Activity クラスの API を使用

API level 11 以降であれば、以下のような感じで素の Activity のメソッドを呼び出して Action Bar に独自 View を設定できる。

// 必要な import 文
import android.app.ActionBar;

// android.app.Activity クラスを拡張した Activity の中で。

ActionBar actionBar = getActionBar();
// 通常表示されるタイトルを非表示にする。
actionBar.setDisplayShowTitleEnabled(false);
// 独自のビューを表示するように設定。
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM);
// 独自のビューを指定。 (ここではレイアウトリソースの ID を指定しているが、View オブジェクトを渡すこともできる。)
actionBar.setCustomView(R.layout.custom_actionbar);
Support Library の v7 AppCompat ライブラリを使用する場合

v7 AppCompat ライブラリを使用する場合は次のような感じになる。 getActionBar() メソッド呼び出しが getSupportActionBar() メソッド呼び出しに変わったのと、ActionBar のパッケージが異なる以外は、同じコードになる。

// 必要な import 文
import android.support.v7.app.ActionBar;

// android.support.v7.app.ActionBarActivity クラスを拡張した Activity の中で。

ActionBar actionBar = getSupportActionBar();
// 通常表示されるタイトルを非表示にする。
actionBar.setDisplayShowTitleEnabled(false);
// 独自のビューを表示するように設定。
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM);
// 独自のビューを指定。 (ここではレイアウトリソースの ID を指定しているが、View オブジェクトを渡すこともできる。)
actionBar.setCustomView(R.layout.custom_actionbar);
ActionBarSherlock を使用する場合

ActionBarSherlock を使用する場合は次のような感じになる。 ActionBar のパッケージが異なる以外は、v7 AppCompat ライブラリのコードと同じ。

// 必要な import 文
import com.actionbarsherlock.app.ActionBar;

// com.actionbarsherlock.app.SherlockActivity クラスを拡張した Activity の中で。

ActionBar actionBar = getSupportActionBar();
// 通常表示されるタイトルを非表示にする。
actionBar.setDisplayShowTitleEnabled(false);
// 独自のビューを表示するように設定。
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM);
// 独自のビューを指定。 (ここではレイアウトリソースの ID を指定しているが、View オブジェクトを渡すこともできる。)
actionBar.setCustomView(R.layout.custom_actionbar);