Xamarin.Android ActionBar(その1 オプションメニュー)
ActionBarは、Android 3.0(API Level 11)以上で使用可能であり、2.x以前のタイトルバー及び従来メニューの後継です。
1 タイトル

ActionBarのSetメソッドで、タイトル(サブタイトル)の指定が可能です。
ActionBar.SetTitle(Resource.String.ActionbarTitle); //タイトルの指定 ActionBar.SetSubtitle(Resource.String.ActionbarSubTitle); //サブタイトルの指定 ActionBar.SetDisplayShowTitleEnabled(true); //タイトル・サブタイトルの表示・非表示
2 Homeボタン
SetHomeButtonEnabled()にtrueを設定すると、アプリアイコンのタッチ時にid=HomeでOnMenuItemSelected()が呼ばれます。ActionBar.SetHomeButtonEnabled(true);
public override bool OnMenuItemSelected(int featureId, IMenuItem item){ if (item.ItemId == Android.Resource.Id.Home) { Toast.MakeText(this, "Home", ToastLength.Short).Show(); } }
動作は同じですが、SetHomeButtonEnabled()の代わりにSetDisplayHomeAsUpEnabled()を使用すると、アプリアイコンの左に戻るアイコンが追加されます。
SetDisplayHomeAsUpEnabled(true);
アプリアイコンへのタッチでは、通常1階層上位への復帰が実装されているため、それに従うのが推奨されています。
3 オプションメニュー
オプションメニューは。item要素の「android:showAsAction」を追加することで、アクションバー上にメニューが展開されます。(※API Level 11以前では、showAsActionリソースがありません)
android:showAsActionの指定は、下記のとおりです。
never : 常に表示しない
ifRoom : 表示する余裕があれば表示
always : 常に表示
withText : titleテキストを表示
collapseActionView : android:actionViewLayoutのアクションビューと関連付ける
通常「"ifRoom|withText"」が使用され、アイコンだけで説明不要な場合にwithTextが省略されます。
alwaysはスペースがなくても強制表示されるので注意が必要です
図は、次のActionBar.xmlをオプションメニューとして指定した場合の縦の場合と横の場合の表示のようすです。
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/optionMenu1" android:showAsAction="ifRoom|withText" android:icon="@android:drawable/ic_menu_save" android:title="SAVE" /> <item android:id="@+id/optionMenu2" android:icon="@android:drawable/ic_menu_edit" android:showAsAction="ifRoom|withText" android:title="EDIT" /> <item android:id="@+id/optionMenu3" android:icon="@android:drawable/ic_menu_gallery" android:showAsAction="ifRoom|withText" android:title="GALLERY" /> <item android:id="@+id/optionMenu4" android:icon="@android:drawable/ic_menu_delete" android:showAsAction="ifRoom|withText" android:title="DELETE" /> <item android:id="@+id/optionMenu5" android:icon="@android:drawable/ic_menu_manage" android:showAsAction="ifRoom|withText" android:title="MANAGE" /> <item android:id="@+id/optionMenu6" android:icon="@android:drawable/ic_menu_call" android:showAsAction="ifRoom|withText" android:title="CALL" /> </menu>
4 分割

UiOptionsにSplitActionBarWhenNarrowを指定すると、縦画面の時だけ、ActionBarが上下に分割されます。
(横画面には関係ありません)
[Activity(Label = "AndroidApplication1", MainLauncher = true, Icon = "@drawable/icon", UiOptions=Android.Content.PM.UiOptions.SplitActionBarWhenNarrow)] public class MainActivity : Activity {
自動追加されたマニュフェストは、次のようになっています。
<application android:label="AndroidApplication1" android:icon="@drawable/icon" android:name="mono.android.app.Application" android:debuggable="true"> <activity android:icon="@drawable/icon" android:label="AndroidApplication1" android:uiOptions="splitActionBarWhenNarrow" android:name="androidapplication1.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>