Android アプリの Action bar に独自 View を設定する
ActionBar#setCustomView
メソッド
Action bar に独自ビューを設定するには、ActionBar#setCustomView
メソッドを使用する。
ActionBar#setCustomView(int)
メソッドActionBar#setCustomView(View)
メソッドActionBar#setCustomView(View, LayoutParams)
メソッド
このメソッドを呼び出すだけでは独自ビューが表示されない。 独自ビューが表示されるようにするために、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)
メソッド を使った方が手軽で良さそう。
@nobuoka setDisplayOptionsの代わりにいつもsetDisplayShowCustomEnabledを使ってますが、違いがあったりするんでしょうか(ソースは今から追いかけるところ
— いちごたけさん (@ichigotake) 2014, 5月 24
素の 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);