Android
メニュー
サーチ…
構文
- inflater.inflate(menu.your_xml_file、menu);
パラメーター
パラメータ | 説明 |
---|---|
inflate(int menuRes, Menu menu) | 指定されたXMLリソースからメニュー階層を膨張させます。 |
getMenuInflater () | このコンテキストを持つMenuInflater を返します。 |
onCreateOptionsMenu (Menu menu) | アクティビティの標準オプションメニューの内容を初期化します。メニュー項目をメニューに配置する必要があります。 |
onOptionsItemSelected (MenuItem item) | このメソッドは、オプションメニューの項目が選択されるたびに呼び出されます |
備考
メニューについてもっと知るには、 これを読んでください。それが役に立てば幸い!
仕切り付きオプションメニュー
Androidにはデフォルトのオプションメニューがあり、いくつかのオプションがあります。より多くのオプションを表示する必要がある場合は、これらのオプションをグループ化して明快にすることが理にかなっています。オプションは、それらの間に仕切り(すなわち水平線)を置くことによってグループ化することができます。ディバイダを可能にするために、次のテーマを使用できます。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>
</style>
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
<item name="android:divider">@color/black</item>
<item name="android:dividerHeight">1dp</item>
</style>
テーマを変更することで、仕切りをメニューに追加することができます。
メニューにカスタムフォントを適用する
public static void applyFontToMenu(Menu m, Context mContext){
for(int i=0;i<m.size();i++) {
applyFontToMenuItem(m.getItem(i),mContext);
}
}
public static void applyFontToMenuItem(MenuItem mi, Context mContext) {
if(mi.hasSubMenu())
for(int i=0;i<mi.getSubMenu().size();i++) {
applyFontToMenuItem(mi.getSubMenu().getItem(i),mContext);
}
Typeface font = Typeface.createFromAsset(mContext.getAssets(), "fonts/yourCustomFont.ttf");
SpannableString mNewTitle = new SpannableString(mi.getTitle());
mNewTitle.setSpan(new CustomTypefaceSpan("", font, mContext), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
mi.setTitle(mNewTitle);
}
次にアクティビティで:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
applyFontToMenu(menu,this);
return true;
}
アクティビティでのメニューの作成
独自のメニューを定義するには、プロジェクトのres/menu/
ディレクトリ内にXMLファイルを作成し、次の要素を含むメニューを作成します。
-
<menu>
:すべてのメニュー項目を保持するメニューを定義します。 -
<item>
:メニュー内の単一項目を表すMenuItemを作成します。また、サブメニューを作成するためにネストされた要素を作成することもできます。
ステップ1:
独自のxmlファイルを次のように作成します。 res/menu/main_menu.xml
:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/aboutMenu"
android:title="About" />
<item
android:id="@+id/helpMenu"
android:title="Help" />
<item
android:id="@+id/signOutMenu"
android:title="Sign Out" />
</menu>
ステップ2:
オプションメニューを指定するには、あなたのアクティビティでonCreateOptionsMenu()
をオーバーライドします。
この方法では、メニューリソース(XMLファイルのres/menu/main_menu.xml
定義されています)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
ユーザがオプションメニューからアイテムを選択すると、システムはあなたのアクティビティのオーバーライドされたonOptionsItemSelected()
メソッドを呼び出します。
- このメソッドは、選択されたMenuItemを渡します。
- メニュー項目(メニューリソースの
res/menu/main_menu.xml
のandroid:id attribute
で定義されているgetItemId()
の一意のIDを返すgetItemId()
呼び出すことによって項目を識別できres/menu/main_menu.xml
* /
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.aboutMenu:
Log.d(TAG, "Clicked on About!");
// Code for About goes here
return true;
case R.id.helpMenu:
Log.d(TAG, "Clicked on Help!");
// Code for Help goes here
return true;
case R.id.signOutMenu:
Log.d(TAG, "Clicked on Sign Out!");
// SignOut method call goes here
return true;
default:
return super.onOptionsItemSelected(item);
}
}
ラッピング!
Activity
コードは次のようになります。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "mytag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.aboutMenu:
Log.d(TAG, "Clicked on About!");
// Code for About goes here
return true;
case R.id.helpMenu:
Log.d(TAG, "Clicked on Help!");
// Code for Help goes here
return true;
case R.id.signOutMenu:
Log.d(TAG, "User signed out");
// SignOut method call goes here
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
自分のメニューがどのように表示されるかのスクリーンショット:
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow