Toolbar菜单按钮无法点击的解决方法

今天遇到一个bug,我给toolbar加了一个menu,但是点击没有任何反应,换句话说这个按钮无法被点击。

menu文件 menu_toolbar_announcement_comment:

<?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">

    <item
        android:id="@+id/menu_comment"
        android:title="@string/comment"
        android:visible="true"
        app:actionLayout="@layout/menu_provider_number_subscript"
        app:showAsAction="always" />

</menu>

代码:

mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.menu_comment:
                        //打开评论
                        showComment();
                        break;
                }
                return true;
            }
        });

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

代码中setOnMenuItemClickListener方法没有起到任何的作用。

我觉得原因可能是,我在menu中使用了自定义布局
app:actionLayout="@layout/menu_provider_number_subscript"

此时需要把menu的点击事件写在onCreateOptionsMenu中

具体如下:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_toolbar_announcement_comment, menu);
        MenuItem item = menu.findItem(R.id.menu_comment);
        item.getActionView().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //打开评论
                showComment();
            }
        });
        return true;
    }

原理我还没有搞懂,等我弄明白了回来填坑。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android ,可以使用 Toolbar 控件来创建一个带有菜单按钮的应用栏。要设置菜单单选按钮,可以按照以下步骤进行: 1. 在 res/menu 文件夹创建一个菜单文件(例如 menu_my.xml),并添加单选按钮菜单项: ``` <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/my_group" android:checkableBehavior="single"> <item android:id="@+id/item1" android:title="Item 1" android:checked="true"/> <item android:id="@+id/item2" android:title="Item 2" android:checked="false"/> <item android:id="@+id/item3" android:title="Item 3" android:checked="false"/> </group> </menu> ``` 注意,这里的 checkableBehavior 属性设置为 single,表示这个菜单组只能选择一个菜单项。 2. 在 Activity 重写 onCreateOptionsMenu 方法,加载菜单文件,并设置菜单点击事件: ``` @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_my, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item1: // 处理菜单点击事件 return true; case R.id.item2: // 处理菜单点击事件 return true; case R.id.item3: // 处理菜单点击事件 return true; default: return super.onOptionsItemSelected(item); } } ``` 3. 在 Activity 获取 Toolbar 控件,并调用 setOnMenuItemClickListener 方法设置菜单点击监听器。在监听器,可以通过 MenuItem 的 isCheckable 和 isChecked 方法来判断菜单项是否可选和是否已选,从而实现单选功能: ``` Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { if (item.isCheckable()) { // 如果菜单项可选 if (!item.isChecked()) { // 如果菜单项未选,将其选 item.setChecked(true); } } // 处理菜单点击事件 return true; } }); ``` 注意,这里要先判断菜单项是否可选,因为有些菜单项可能不是单选按钮,不需要实现单选功能。如果菜单项可选并且未选,则将其选。处理完菜单点击事件后,要返回 true,表示已经处理了该事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值