Menu菜单分为三种options 选项菜单, context 上下文菜单,pupos弹出菜单
2、新建一个Module项目,在res文件夹下创建一个menu文件夹,在menu里面创建一个Menu resource file的xml文件。
3、然后在xml文件下创建菜单列表
其中android:orderInCategory="3"值列表的优先级别
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/fort_group" android:title="字体大小" android:orderInCategory="3" ></item> <item android:id="@+id/fort_color" android:title="字体颜色" ></item> <item android:id="@+id/fort_style" android:title="字体样式" ></item> </menu>
4、xml创建菜单的对象
public boolean onCreateOptionsMenu(Menu menu) { //先获得菜单填充器的对象 MenuInflater inflater=getMenuInflater(); //两个参数,一个是资源id,二个菜单对象 inflater.inflate(R.menu.mani,menu); /*也可以这样写 getMenuInfater().inflate(R.menu.mani,menu); 回调是true时说明显示菜单 */ return true;
5、代码增加菜单项的方法
/* 可以通过add方法增加菜单项 1、表示大groupId,菜单项分组,如果没有就用Menu.NONE表示 2、菜单项的唯一id,最好用常量来表示 3、菜单项的排列顺序 4、菜单的标题文本 */ menu.add(Menu.NONE,2,Menu.NONE,"设置字体");6、对菜单项的操作——第一种方式
//获得item的Id和相应的操作,回传值如果是true代表可以操作 public boolean onOptionsItemSelected(MenuItem item) { //获得item的ID int itemId=item.getItemId(); switch(itemId){ case R.id.fort_group: tvshow.setTextSize(50);break; case R.id.fort_color: int red= (int) (Math.random()*256); int green=(int)(Math.random()*256); int blue= (int) (Math.random()*256); tvshow.setTextColor(Color.rgb(red,green,blue)); break; } return super.onOptionsItemSelected(item); }7、 对菜单项的操作——第二种方式
这种方法继承了Activity但是不能在真机上面显示,
继承AppCompatActivity有不能使用onMenuItemSelected的方法,求大神指导。
//获得item的Id和相应的操作的第二种方式,注意要让类继承Activity @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { int itemId=item.getItemId(); if(itemId==R.id.fort_group){ tvshow.setText("第二种点击方式"); } return super.onMenuItemSelected(featureId, item); }8、 对菜单项的操作——第三方式(使用于所有菜单类型)
//先通过menu.findItem的方法获取item MenuItem item=menu.findItem(R.id.fort_style); //添加相对应的监听器 item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { Toast.makeText(MainActivity.this,item.getTitle().toString(),Toast.LENGTH_LONG) .show(); return false; } });