副題:複雑な形状のオプションメニューを作成し、必要に応じ、メニューの一部を削除する。
形状が複雑なオプションメニューはJavaのcodeで書くよりも、xmlで書いた方が視認性が高まる。
sampleは次のとおりである。
resフォルダーの直下にmenuという名前のフォルダーを作成し、menuフォルダーの直下に、このxmlファイルを配置する。このsampleでは、このxmlファイル名は、menu_inputactivity.xmlである。
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
>
<item
android:id="@+id/Menu_Setting"
android:title="@string/Menu_Setting"
>
</item>
<item
android:id="@+id/Menu_Display"
android:title="@string/Menu_Display"
>
<menu>
<item
android:id="@+id/Menu_ShowButtons"
android:title="@string/Menu_ShowButtons"
>
</item>
<item
android:id="@+id/Menu_HeightSize"
android:title="@string/Menu_HeightSize"
>
</item>
</menu>
</item>
<item
android:id="@+id/Menu_Quit"
android:title="@string/Menu_Quit"
>
</item>
</menu>
このメニューを任意のActivityに作成するsample codeは次のとおりである。必要に応じ、任意のメニューを削除する。
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inf;
inf = getMenuInflater();
inf.inflate(R.menu.menu_inputactivity, menu);
if(p!=null && p.iInputMethod==1){//必要に応じ
MenuItem mi;
mi = menu.findItem(R.id.Menu_Display);
if(mi!=null){//サブメニューのメニューを削除する。
SubMenu sub;
sub = mi.getSubMenu();
sub.removeItem(R.id.Menu_ShowButtons);
}
}
return super.onCreateOptionsMenu(menu);
}
onCreateOptionsMenuメソッドは、Activityの起動時に1回しか呼ばれない。そういう意味で、上記のJava codeだと、「静的に」メニューを作成したことになる。
動的にメニューを変更するのであれば、下記のようにonPrepareOptionsMenuメソッドを組み合わせて使うことになる。
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inf;
inf = getMenuInflater();
inf.inflate(R.menu.menu_inputactivity, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(p==null) return super.onPrepareOptionsMenu(menu);
MenuItem mi;
SubMenu sub;
mi = menu.findItem(R.id.Menu_Display);
sub = mi.getSubMenu();
mi = sub.findItem(R.id.Menu_ShowButtons);
if(p.iInputMethod==1){//必要に応じ
if(mi!=null) sub.removeItem(R.id.Menu_ShowButtons);
}
else{
if(mi==null){
sub.add(Menu.NONE, R.id.Menu_ShowButtons,
Menu.NONE, R.string.Menu_ShowButtons);
}
}
return super.onPrepareOptionsMenu(menu);
}
0 件のコメント:
コメントを投稿