效果图如下

文章末尾会贴出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();@Overrideprotected 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() {@Overridepublic 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 actionswitch (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);// 创建普通字符型ClipDataClipData 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>() {@Overridepublic 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@Overridepublic 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);}@Overridepublic 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

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

  1. html歌曲朋友圈,为何有的人喜欢在朋友圈里分享歌曲,他们都是些什么人?长见识了...

    Hi,老铁们!感谢你们能点开小编的文章,希望大家喜欢小编写的文章.可以的话,动动手指点点关注把文章转发出去,支持一下小编.在此祝各位老铁们天天好心情,事事都如意. 为何有的人喜欢在朋友圈里分享歌曲,他 ...

  2. 鸿蒙TouchEvent已实现单击、连续、长按功能,安卓也可以模仿着原理实现(网上绝大多未实现不动长按),这个支持不动长按事件

    原创文章引用请注明出处,文章问题持续优化中. 以下的例子是模仿抖音的刷视频的单击播放.暂停,长按弹出框,连续点击是点赞的效果.连续点击视频时候,视频处于播放或者暂停是不会击穿事件导致视频播放或者暂停的 ...

  3. popupwindow中的Edittext长按不出现输入法选择框

    参考资料: 1.popupwindow中的Edittext长按不出现输入法选择框 http://www.eoeandroid.com/thread-93841-1-1.html 2. Edittext ...

  4. android 复制控件,Android长按复制文本功能

    安卓一般能用到长按复制的控件Textview,Editext,可能也有WebView 在开始之前先说一个我遇到的一个坑: viewGroup中有一个这个属性android:descendantFocu ...

  5. 元”启长三角 共享新未来!长三角数字干线元宇宙创新发展论坛暨第一届长三角元宇宙日在长三角绿洲智谷·赵巷成功举办

    5月30日下午,由工信部网络安全产业发展中心(工信部信息中心).长三角投资(上海)有限公司.青浦区经济委员会.青浦区科学技术委员会.青浦区科学技术协会指导,北京大数据协会元宇宙专委会主办,长三角赵巷新 ...

  6. 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...

    问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

  7. python3.7下载教程视频_视频 | 我选择Python3.7来学习!顺便把教程分享给大家

    原标题:视频 | 我选择Python3.7来学习!顺便把教程分享给大家 [文章正文] Python 3.7增添了众多新的类,可用于数据处理.针对脚本编译和垃圾收集的优化以及更快的异步I/O. Pyth ...

  8. 安卓webview下使用zepto的swipe遇到的坑

    众所周知,安卓手机上touch事件一直有各种各样莫名其妙的问题. 比如,我想要用swipeLeft/swipeRight监听向左向右滑动事件,如果只是单纯为元素增加swipeLeft/swipeRig ...

  9. 第六周作业(等值字串,KMP匹配,大整数相乘,最长公共子串,判断两个字符串是否匹配,最长回文子串,年号字串)

    目录 1.等值字串 2.KMP匹配 3.大整数相乘 4.最长公共子串 5.判断两个字符串是否匹配 6.最长回文字串 7.年号字串 补发一下,原来忘记发了. 1.等值字串 [问题描述]如果字符串的一个子 ...

最新文章

  1. kotlin 一个加号引发的血案
  2. READING NOTE: R-FCN: Object Detection via Region-based Fully Convolutional Networks
  3. PTGAN:针对行人重识别的生成对抗网络 | PaperDaily #36
  4. 爬取某东600多本书籍,用数据帮你分析哪些Python书籍值得选择(上)
  5. linux系统管理试卷必修B卷,2013-2014Linux系统管理试卷
  6. vue watch 修改滚动条_Vue 里的 computed 和 watch 的区别
  7. MySQL 基础系列篇
  8. MNN量化—ADMM优化算法
  9. 头条 上传图片大小_遇到不会注册今日头条号,这么办?
  10. matlab 线性分析,线性系统稳定性分析的MATLAB分析方法.doc
  11. 网络打印机怎么扫描到计算机,怎么用打印机扫描文件-富士施乐SC2020复印机设置网络扫描到计算机(SMB)...
  12. 卡内基梅隆大学计算机系难考,考出托福成绩 成功申请卡内基梅隆大学计算机科学专业...
  13. 【惨遭被裁】985毕业,依然过不好这一生
  14. 研发平台演进:从工具链到开放平台
  15. 什么是 Python 语言
  16. aarch64指令集_ARM与AARCH64指令集优化总结
  17. Word文档中--邮件合并
  18. phpexcel 设置批注_Phpexcel 实例
  19. html css 开发商业站点,《使用HTML语言和CSS开发商业站点》
  20. 在对话框显示图片的多种方法

热门文章

  1. 如何区分光猫、路由器和交换机?
  2. 怎么给电脑里面的文件加密?这个软件轻松帮忙搞定
  3. 《数据结构与算法》知识小结
  4. 批量创建Azure DevOps Server 的账户
  5. android(小米)系统隐藏的小功能
  6. 文献 | 从认知和护理角度谈双相情感障碍
  7. win+ubuntu安装Nvidia显卡驱动
  8. vue开发PC端响应式项目
  9. 下载和攻略补遗之人偶遗迹 ひとがたルイン
  10. DOSBOX+MASM汇编环境的的安装与使用