Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

【Android】Actionbarの基本的な利用方法

おはようございます。


AndroidでActionbarを使うときの基本的なプログラミングについてメモしておきたいと思います。


Actionbarの追加と除去

  • 追加はminSdkVersionがAPI Level 11以上になっていれば自動で追加される
  • Actionbarをジョコするときは、ManifestのActivityタグのテーマを Theme.Holo.NoActionbar にセットする。以下はその例
<activity android:theme="@android:style/Theme.Holo.NoActionBar">
  • また、実行時でも隠す処理と表示する処理を動的に実行できる
Actionbar actionbar = getActionBar();
actionBar.hide();
actionBar.show();

アイテムの追加

  • res/menu の対応するXMLのitemタグ書き込む(統一して一つのファイルにしても良い)。以下例
<item 
        android:id="@+id/menu_upload"
        android:orderInCategory="2"
        android:title="@string/menu_upload"
        android:showAsAction="ifRoom|withText"
        android:icon="@android:drawable/ic_menu_camera" />
    
        
<item
        android:id="@+id/menu_settings"
        android:orderInCategory="1"
        android:title="@string/menu_settings"
        android:showAsAction="ifRoom|withText"
        android:icon="@android:drawable/ic_menu_manage" />
  • android:orderInCategory は重要度
  • android:showAsAction の指定する値については以下の表を参考にする。
説明
ifRoom Actionbarに領域がある場合は表示
withText テキストとアイコンの両方を表示(領域がある場合は)
never Actionbarに表示しない
always 常に表示
collapseActionView action viewを関連付けることで折り畳めるメニューを表示(Level 14から)
  • android:icon に指定するのは、基本的にはSDKで用意されているアイコン。
  • res/values/strings.xml に上記で定義したStringを書き込む。以下例
<string name="menu_upload">Upload</string>
注意
  • 右側にオプションメニュー(縦に3つの点がついたやつ)は、表示領域に表示しきれなくなったら自動で生成されます。ただし、メニューボタンがある端末はオプションメニューは生成されず、強制的にメニューボタンでの表示となります。

作成したActionbarを表示

以下の関数が自動生成されていると思います。表示するのはこれだけで構いません。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
	// menu/activity_main.xmlからメニューを作成
	getMenuInflater().inflate(R.menu.activity_main, menu);
	return true;
}

なお、ホーム画面となる画面以外では、Actionbarの左上にあるホームアイコンに矢印を出現させることになると思いますが、その方法は各ActivityのonCreate(アクティビティの生成のとこ)で以下のコードを書くだけです。

getActionBar().setDisplayHomeAsUpEnabled(true);


また、Actionbarのタイトルを変更したい場合も、onCreate に以下のコードを書くだけです。

getActionBer().setTitle(R.string.app_name);

メニューが選択されたときの処理

ここではActionbarのHomeアイコンを合わせた各メニューが選択されたときの処理を書きたいと思います。
Homeアイコンを押したときはHome画面に戻るようにしています。

@Override
public boolean onOptionsItemSelected(MenuItem item){
	switch (item.getItemId()){ // if使うとエラー(itemがInt形式なため)
		case android.R.id.home:   // アプリアイコン(ホームアイコン)を押した時の処理
			Intent intent = new Intent(this, MainActivity.class);
			intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
			startActivity(intent);
			break;
		case R.id.menu_upload:   // アップロードボタンが押された時
			break;
		case R.id.menu_settings:
			// 設定ボタンを押した時
			Toast.makeText(this, "Setting", Toast.LENGTH_SHORT).show();
			break;
	}
	return true;
}


以上です。

Actionbarにタブを追加したり検索機能を追加したりするのもあるのですが、それはまた今度書きたいと思います。

それでは。