取消Toolbar菜單長按時,出現的toast

Android的Toolbar裏面,能夠添加菜單,可是使用過程當中發現了一點問題,就是菜單的item長按時,會在下面出現一個toast,toast當前菜單的title。可是咱們並不想有這個toast。
在網上搜了,並無很好的解決方法。其中一種解決方法是,經過findViewById(R.id.menu_id)找到對應的菜單item,而後給這個菜單的itemview設置OnLongClickListenerandroid

final View v = findViewById(R.id.menu_id);

        if (v != null) {
            v.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    return false;
                }
            });
        }

這個方法雖然解決設置指定的菜單長按彈出toast,但對應隱藏到省略號的那個item長按沒有解決,由於那個view不是本身定義的,是系統定義的。網上搜不到,而後我本身寫了一個工具類。
原理是遍歷Toolbar的childview,找到其中顯示菜單的ActionMenuView,而後遍歷這個ActionMenuView,把菜單item的OnLongClickListener都設置爲null,就ok了。ide

import android.support.v7.widget.ActionMenuView;
import android.support.v7.widget.Toolbar;

/**
 * Created by zhangyi on 2017/12/11.
 */

public class ToolbarUtil {
    /**
     * 取消Toolbar菜單長按時,出現的toast
     */
    public static void cancelToast(Toolbar toolbar){
        if (toolbar == null) {
            return;
        }
        toolbar.post(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < toolbar.getChildCount(); i++) {
                    if(toolbar.getChildAt(i) instanceof ActionMenuView){
                        ActionMenuView actionMenuView= (ActionMenuView) toolbar.getChildAt(i);
                        for (int i1 = 0; i1 < actionMenuView.getChildCount(); i1++) {
                            actionMenuView.getChildAt(i1).setOnLongClickListener(null);
                        }
                        break;
                    }
                }
            }
        });
    }
}

參考連接:http://blog.csdn.net/a87024341/article/details/52526428工具

相關文章
相關標籤/搜索