菜单资源文件通常放置在res\menu目录下,在创建项目时,默认不自动创建menu目录,所以需要手动创建。Android Resource Directory->value menu
菜单资源根元素通常是<menu></menu>标记,子元素为<item></item>和<group></group>
<item></item>标记常用属性:
android:id 用于为菜单设置ID android:title 用于为菜单项设置标题 android:alphabeticShortcut 用于为菜单项指定字符快捷键 android:numericShortcut 用于为菜单项指定数字快捷键 android:icon 用于为菜单项指定图标 android:enable 用于指定该菜单项是否可用 android:checkable 用于指定该菜单项是否可选 android:checked 用于指定该菜单项是否选中 android:visible 用于指定该菜单项是否可见
<group></group>标记常用属性:
android:id 用于为菜单组设置ID android:heckableBehavior 用于为指定菜单组选择行为,值可以为 none(不可选) 、all(多选) 、 single(单选) android:menuCategory 用于为指定菜单组进行分类,指定优先级,值可以为container、system、secondary和alternative android:enable 用于为指定菜单组中全部菜单项是否可用 android:visible 用于为指定菜单组中全部菜单项是否可见
<item>标记中还可以包含<menu>标记,用于显示子菜单
<group>标记中可有多个<item>标记,用于组成菜单组
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><item android:title="item1"></item><item android:title="item2"><menu><item android:title="item2-1"/><item android:title="item2-2"/></menu></item><group><item android:title="item3"/><item android:title="item4"/></group>
</menu>
1.上下文菜单 长按注册的控件显示菜单
public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {... ...TextView textView=findViewById(R.id.textView);//注册上下文菜单 长按注册的控件显示菜单registerForContextMenu(textView);}public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {//用于创建菜单(上下文菜单)MenuInflater menuInflater=new MenuInflater(MainActivity.this);menuInflater.inflate(R.menu.menu1,menu);}public boolean onContextItemSelected(@NonNull MenuItem item) {//用于选择菜单项(上下文菜单)int groupId=item.getGroupId();int itemId=item.getItemId();if(groupId==R.id.~){~}if(itemId==R.id.~){~}return super.onContextItemSelected(item);}
}
2.选项菜单(隐藏标题栏将无法使用) 点击标题最右侧三个点显示菜单
public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {... ...}public boolean onCreateOptionsMenu(Menu menu) {//用于创建菜单(选项菜单)MenuInflater menuInflater=new MenuInflater(MainActivity.this);menuInflater.inflate(R.menu.menu1,menu);return super.onCreateOptionsMenu(menu);}public boolean onOptionsItemSelected(@NonNull MenuItem item) {//用于选择菜单项(选项菜单)int groupId=item.getGroupId();int itemId=item.getItemId();if(groupId==R.id.~){~}if(itemId==R.id.~){~}return super.onOptionsItemSelected(item);}
}