全网最清晰的WebView自定义长按菜单教程

这篇教程详细介绍了如何在WebView中自定义长按菜单,包括技术原理和具体代码实现,解决了网络上文档不准确或兼容性问题。
摘要由CSDN通过智能技术生成

一、背景

某些情况下,我们希望能够自定义WebView的长按菜单功能,但网络上各种文档都不是很准确或是兼容性不好,经过综合探索,整理出WebView自定义长按菜单的技术方案。

二、技术原理概述

突破口是三点:
1、拦截WebView中的startActionMode
2、自定义ActionMode.Callback2
3、菜单选项的隐藏与显示

三、代码实现

public class CustomActionWebView extends WebView {

    private static final String CUSTOM_MENU_JS_INTERFACE = "CustomMenuJSInterface";
    private ActionMode mActionMode;
    private ActionSelectListener mActionSelectListener;
    private List<String> mCustomMenuList; //自定义添加的选项
    private List<String> mStayMenuList; //需要保留的系统选项

    public CustomActionWebView(Context context) {
        super(context);
        init();
    }

    public CustomActionWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomActionWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        addJavascriptInterface(new ActionSelectInterface(this), CUSTOM_MENU_JS_INTERFACE);
        mStayMenuList = new ArrayList<>();
        mStayMenuList.add("复制");
        mStayMenuList.add("全选");
        mStayMenuList.add("分享");
        mStayMenuList.add(getResources().getString(R.string.menu_test));

        mCustomMenuList = new ArrayList<>();
        mCustomMenuList.add("菜单1");
        mCustomMenuList.add("菜单2");
    }


    @Override
    public ActionMode startActionMode(ActionMode.Callback callback) {
        return super.startActionMode(buildCustomCallback(callback));
    }

    @Override
    public ActionMode startActionMode(ActionMode.Callback callback, int type) {
        return super.startActionMode(buildCustomCallback(callback), type);
    }

   
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
对于全网最详细的VSCode教程,以下是一个简短的描述: 全网最详细的VSCode教程应该包含以下内容:基本介绍、安装和设置、编辑器布局、常用快捷键、实用插件和扩展、调试功能、版本控制、代码片段等。 在基本介绍部分,应该详细介绍VSCode是什么,它的优点和特点,如何下载和安装等。 安装和设置部分应该涵盖不同操作系统上的安装步骤和注意事项。同时,还应该介绍不同配置选项,如主题、字体、缩进设置等。 编辑器布局部分应该解释各个面板和视图的作用,如侧边栏、编辑窗口、终端等。详细说明如何调整布局以优化工作流程。 常用快捷键部分应该列举常用的快捷键和相关操作,如快速打开文件、搜索、查看定义等。应该对不同功能区分操作系统进行说明。 实用插件和扩展部分应该介绍一些常见和有用的插件,如代码片段、代码格式化、调试器等。应该详细解释如何安装和使用这些插件。 调试功能部分应该详细介绍如何配置和使用调试器,包括设置断点、查看变量的值等。 版本控制部分应该介绍如何使用内置的版本控制工具,如Git,如何提交、推送和拉取代码等。 最后,代码片段部分应该教授如何创建和使用代码片段,以提高编码效率。 以上仅是对全网最详细的VSCode教程的一些简要描述。当然,真正最详细的教程可能比这个更加全面和详细,具体内容可能还包括更多高级功能和技巧。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值