安卓webview长按分享,长按选择,长按复制,仿好奇心日报长按分享自定义弹窗的实现

效果图如下



文章末尾会贴出GitHub源码,欢迎star


注:选中的文字有时候需要取消选中

webview.clearMatches();//取消已经选中的webview里的文字
webView.clearFocus();//移除高亮显示,如果不移除在三星s6手机上会崩溃

public class MainActivity extends AppCompatActivity {
    private WebView webView;
    MenuItem.OnMenuItemClickListener handler;
    private ActionMode mActionMode = null;


    String TAG = MainActivity.class.getName();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        String url = "file:///android_asset/demo.html";
        webView.loadUrl(url);


        //用来监听Contextual Action Bar的点击事件
        handler = new MenuItem.OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                // do the menu action
                switch (item.getItemId()) {
                    case 1:
                        //这里调取你自己的分享界面
                        Log.i("you click", "分享");
                        webText();
                        if (mActionMode != null) {
                            mActionMode.finish();
                            webView.clearFocus();//移除高亮显示,如果不移除在三星s6手机上会崩溃
                        }
                        break;
                    case 2:
						//获取剪贴板管理器:
						ClipboardManager cm = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
						// 创建普通字符型ClipData
						ClipData mClipData = ClipData.newPlainText("Label", "这里是你要放入剪切板的文字,
						可以是你获取到的webview中长按选中的文字");
						// 将ClipData内容放到系统剪贴板里。
						cm.setPrimaryClip(mClipData);
                        break;
                }
                return true;
            }
        };
    }




    //调用h5的js接口,通过js的getValue()获取选中文字,这个js方法让h5工程师加到网页中
    @TargetApi(Build.VERSION_CODES.KITKAT)
    private void webText() {
        webView.evaluateJavascript("getValue()", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                Log.e(TAG, "youclickvalue=" + value);
                Toast.makeText(MainActivity.this, "你要分享的文案是:" + value, Toast.LENGTH_SHORT).show();
            }
        });
    }




    /*看一看menu.add方法的参数:
  第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。
  第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。
  第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
  第四个String类型的title参数,表示选项中显示的文字。*/
    //重写弹出Contextual Action Bar
    @Override
    public void onActionModeStarted(ActionMode mode) {
        if (mActionMode == null) {
            mActionMode = mode;
            Menu menu = mode.getMenu();
            menu.clear();
            menu.add(0, 1, 0, "我的分享").setOnMenuItemClickListener(handler);
            menu.add(0, 2, 0, "复制").setOnMenuItemClickListener(handler);
        }
        super.onActionModeStarted(mode);
    }


    @Override
    public void onActionModeFinished(ActionMode mode) {
        mActionMode = null;
        webView.clearFocus();//移除高亮显示,如果不移除在三星s6手机上会崩溃
        super.onActionModeFinished(mode);
    }


}




下面简单贴出h5代码
主要是通过window.getSelection().toString()获取到选中的内容
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript">
    function getValue(){
    return window.getSelection().toString();
    }


    </script>
</head>
<body>
<p>啊搜狐打工的湖广会馆贷后管理黑咕隆咚会干货</p>
<p>啊搜狐打工的湖广会馆贷后管理黑咕隆咚会干货</p>
<p>啊搜狐打工的湖广会馆贷后管理黑咕隆咚会干货</p>
<p>啊搜狐打工的湖广会馆贷后管理黑咕隆咚会干货</p>
<p>啊搜狐打工的湖广会馆贷后管理黑咕隆咚会干货</p>
<p>啊搜狐打工的湖广会馆贷后管理黑咕隆咚会干货</p>
<p>啊搜狐打工的湖广会馆贷后管理黑咕隆咚会干货</p>
<p>啊搜狐打工的湖广会馆贷后管理黑咕隆咚会干货</p>
<p>啊搜狐打工的湖广会馆贷后管理黑咕隆咚会干货</p>
<p>啊搜狐打工的湖广会馆贷后管理黑咕隆咚会干货</p>
</body>
</html>



GitHub源码地址: https://github.com/qiushi123/WebViewShareText
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值