Android Menu的简单使用

Menu

menu是啥?

顾名思义,menu是一个菜单,在一个app中一个Activity中通常要显示非常多的菜单,但是手机的屏幕空间非常有限,因此充分利用屏幕空间在手机界面设计中就变得非常重要,如果你的活动中有非常多的菜单要显示,就可以使用Android中的menu

1.创建menu.xml文件

首先在项目res资源文件夹下新建menu文件夹

image-20220429153546200

然后在该文件夹下新建一个menu.xml类型的文件

image-20220429153724574

main_activity_menu.xml代码

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <group>
      <!--每个item必须得有自己独立的id和title(title可以重名)-->
      <item android:id="@+id/share"
          android:title="分享"
          />
      <item android:id="@+id/delete"
          android:title="删除"
          />
      <item android:id="@+id/edit"
          android:title="编辑"
          />
  </group>
</menu>

此时左侧的预览框其实已经能显示出来menu被放入Activity后的样子了

image-20220429153920388

差不多这样

然后在MainActivity中注入该menu

在MainAvtivity中重写OnCreateOptionsMenu方法,在方法体注入我们刚刚写好的menu

getMenuInflater().inflate(R.menu.main_activity_menu,menu);

image-20220429154253170

MainActivity代码

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_activity_menu,menu);
        return super.onCreateOptionsMenu(menu);
    }
}

此时运行项目模拟器上面已经可以显示出menu了

image-20220429154702578

标题栏上的三个小点就menu,点击之后显示所有菜单。

菜单点击(被选择的时候的回调方法)onOptionsItemSelected(MenuItem item)
    /**
     *
     * @param item 记得刚刚创建main_activity_menu时自己创建的item项吗?这个参数就是你在menu中选中(点击)的那个item
     * @return
     */
    @SuppressLint("NonConstantResourceId")
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //通过获取选择(点击)的MenuItem的id来判断你选择了哪一项
        switch (item.getItemId()){
            case R.id.share:
                Toast.makeText(this, "你选择了分享菜单", Toast.LENGTH_SHORT).show();break;
            case R.id.delete:
                Toast.makeText(this, "你选择了删除菜单", Toast.LENGTH_SHORT).show();break;
            case R.id.edit:
                Toast.makeText(this, "你选择了编辑菜单", Toast.LENGTH_SHORT).show();break;
        }
        return super.onOptionsItemSelected(item);
    }

在MainActivity中重写此方法,通过item.getItemId()获取MenuItem的id然后进行逻辑代码的编写。就可以得到下图的效果

menu

在代码中添加(不使用menu.xml)

使用menu.add()方法,该方法有多个重载,讲几个常用的

menu.add(String title) //添加一个menuItem,并传入title
   /** 
     *
     * @param groupId 代表MenuItem添加进入菜单组的groupId
     * @param id      代表MenuItem添本身的id
     * @param order   代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
     * @param title   代表当前MenuItem的title
     * @return
     */
menu.add(int groupId,int id,int order,String title)

将上面代码按照动态添加的方法放入menu,也能达到一样的效果

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(1,R.id.share,0,"分享");
        menu.add(1,R.id.delete,0,"删除");
        menu.add(1,R.id.edit,0,"编辑");
        return super.onCreateOptionsMenu(menu);
    }
icon和showAsAction属性

在之前的main_activity_menu.xml上为每个item添加上这些属性

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
  <group>
      <item android:id="@+id/share"
          android:title="分享"
          android:icon="@drawable/share"
          app:showAsAction="always"
          />
      <item android:id="@+id/delete"
          android:title="删除"
          android:icon="@drawable/delete"
          app:showAsAction="always"
          />
      <item android:id="@+id/edit"
          android:title="编辑"
          android:icon="@drawable/edit"
          app:showAsAction="always"
          />
  </group>
</menu>

icon属性:表示菜单的图标

showAsAction: 指定菜单项的显示方式。常用的有ifRoom、never、always、withText,多个属性值之间可以使用|隔开

showAsAction的可选属性值:

名称效果
always菜单项永远不会被收纳到溢出菜单中,因此在菜单项过多的情况下可能超出菜单栏的显示范围。
ifRoom在空间足够时,菜单项会显示在菜单栏中,否则收纳入溢出菜单中。
withText无论菜单项是否定义了icon属性,都只会显示它的标题,而不会显示图标。使用这种方式的菜单项默认会被收纳入溢出菜单中。
never菜单项永远只会出现在溢出菜单中。

添加上述参数后页面的显示效果:

image-20220429170712040

可以看到标题栏上多了三个菜单项,显示的形式都是图标。

留下伏笔 收纳溢出菜单中菜单项的显示那么像列表,那有没有像ExpandableListView这样子类似的二级列表呢?

之后更会有menu和底部导航栏的梦幻联动

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值