タイトルバーにアイコンを表示する ではタイトルバーに、アイコンを表示する方法を解説しました。今回は、アイコンだけではなくて、自由に表示内容を変える方法を紹介します。タイトルバーに関する主なカスタマイズは以下とおりです。
Window.FEATURE一覧(抜粋)
| マクロ名 | 説明 |
|---|---|
| Window.FEATURE_NO_TITLE | タイトルバーを非表示にする |
| Window.FEATURE_CUSTOM_TITLE | 任意のレイアウトファイルを設定する |
| Window.FEATURE_LEFT_ICON | アイコン画像を付与する |
| Window.FEATURE_RIGHT_ICON | アイコン画像を付与する |
アイコン画像の付与(Window.FEATURE_LEFT_ICON、Window.FEATURE_RIGHT_ICON)については、タイトルバーにアイコンを表示するを参照してください。今回はWindow.FEATURE_NO_TITLEとWindow.FEATURE_CUSTOM_TITLEについて紹介します。
サンプルコードはGoogleCodeのこちらで公開しています
Windowクラスで定義されている上記の値は、Activity#requestWindowFeatureメソッドを利用してActivityに設定します。たとえば、タイトルバーを非表示にする場合は以下のように記述します。
タイトルバーを非表示にする
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//タイトルバーを非表示にする(setContentViewの前にすること)
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
}
3行目のコメントにもあるようにActivity#requestWindowFeatureメソッドはsetContentViewメソッドの前に設定してください。順番を入れ替えると設定値が反映されません。
![]() ![]() |
タイトルバーをカスタマイズする
タイトルバーは、任意のレイアウトファイルを設定することが可能です。タイトルバーの表示領域は広くはありませんが常に表示されています。任意のレイアウトに変更することで効果的な利用が可能です(下図、タイトルバー部分に”TitleBar”と”right”をそれぞれ表示)。

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//タイトルにレイアウトを指定する
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
//カスタマイズしたレイアウトファイルを指定
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
setFeatureIntメソッドでR.layout.titlebarを設定します。
res/layout/titlebar.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical">
<TextView android:id="@+id/left_title_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="TitleBar" />
<TextView android:id="@+id/right_title_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="right" />
</RelativeLayout>
レイアウトファイルに記載した内容がタイトルバーに反映されます。サンプルのtitlebarレイアウトファイルは2つのTextViewを横に並べています。
動的にタイトルを変更する
タイトルバーの表示内容は簡単に変えることができます。タイトルバーに適用したレイアウトファイル(titlebar.xml)からTextViewを取得、TextView#setTextメソッドを使って表示内容を変更してみましょう。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//タイトルにレイアウトを指定する
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
//カスタマイズしたレイアウトファイルを指定
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
//タイトルバーのTextView
final TextView leftTitle = (TextView) findViewById(R.id.left_title_text);
//main.xmlのEditText、ボタンの設定
final EditText leftTextEdit = (EditText) findViewById(R.id.left_text_edit);
Button leftButton = (Button) findViewById(R.id.left_text_button);
//ボタンのリスナ登録
leftButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
leftTitle.setText(leftTextEdit.getText());
}
});
final TextView rightTitle = (TextView) findViewById(R.id.right_title_text);
final EditText rightTextEdit = (EditText) findViewById(R.id.right_text_edit);
Button rightButton = (Button) findViewById(R.id.right_text_button);
rightButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
rightTitle.setText(rightTextEdit.getText());
}
});
}
サンプルでは、12行目でタイトルバー(titlebar.xml)のTextViewを取得します。
21行目:Activity側のleftButton/rightButtonボタン(レイアウトファイルはmain.xml)を押下した時の挙動です。EditTextで入力した文字列でタイトルバーのTextViewを更新しています。
