方式一:
设置handle的size为0,这种方式对原生的系统有效,对国产room无效

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><size
            android:height="0dp"android:width="0dp"/></shape><TextView
                android:textSelectHandle="@drawable/select_handle"android:textSelectHandleLeft="@drawable/select_handle"android:textSelectHandleRight="@drawable/select_handle"/>

方式二:

EditText中的文字默认长按呼出文本选择菜单,而TextView需要设置android:textIsSelectable=”true”。长按时会呼出菜单,可以设置
setLongClickable(false);
修改文本选择菜单内容,只需要为TextView或者EditText设置setCustomSelectionActionModeCallback()方法,并且在方法里实现ActionMode.Callback()或ActionMode.Callback2()接口。

        setLongClickable(false);setTextIsSelectable(false);setCustomSelectionActionModeCallback(new ActionMode.Callback() {@Overridepublic boolean onCreateActionMode(ActionMode mode, Menu menu) {return false;}@Overridepublic boolean onPrepareActionMode(ActionMode mode, Menu menu) {return false;}@Overridepublic boolean onActionItemClicked(ActionMode mode, MenuItem item) {return false;}@Overridepublic void onDestroyActionMode(ActionMode mode) {}});

经过测试这种方式对原生系统或者部分国产机有效(oppo有效,部分华为有效,小米无效)

方式三:反射调用Handle hide相关函数,对全部机型有效。
在TextView的Editor中有下面一段代码

 if (!mInsertionControllerEnabled) {hideInsertionPointCursorController();if (mInsertionPointCursorController != null) {mInsertionPointCursorController.onDetached();mInsertionPointCursorController = null;}}if (!mSelectionControllerEnabled) {stopTextActionMode();if (mSelectionModifierCursorController != null) {mSelectionModifierCursorController.onDetached();mSelectionModifierCursorController = null;}}

尝试设置mInsertionControllerEnabled = false 和 mSelectionControllerEnabled = false,来达到屏蔽文本选择菜单效果。
测试发现,MIUI在按下时,都会创建mInsertionPointCursorController和mSelectionModifierCursorController,并且显示select handle,也就是那个讨厌的捶捶。每次按下后,这两个变量又变成true。

既然MIUI要显示,那我们可以在它显示完成后隐藏,就可以屏蔽了,按照这个思路,在TextView的onTouchEvent中,调用hide();

@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_CANCEL:case MotionEvent.ACTION_UP:postDelayed(new Runnable() {@Overridepublic void run() {setSelectHandleDisabled();}}, 50); // 延迟50ms,等room显示handle完后,再隐藏break;default:break;}return super.onTouchEvent(event);}
private void setSelectHandleDisabled() {try {Field mEditor = TextView.class.getDeclaredField("mEditor");mEditor.setAccessible(true);Object object = mEditor.get(this);Class mClass = Class.forName("android.widget.Editor");// 选中时handleMethod selectionController = mClass.getDeclaredMethod("getSelectionController");selectionController.setAccessible(true);Object invokeSelect = selectionController.invoke(object);Method hideSelect = invokeSelect.getClass().getDeclaredMethod("hide");hideSelect.invoke(invokeSelect);// 插入时handleMethod insertionController = mClass.getDeclaredMethod("getInsertionController");insertionController.setAccessible(true);Object invokeInsert = insertionController.invoke(object);Method hideInsert = invokeInsert.getClass().getDeclaredMethod("hide");hideInsert.invoke(invokeInsert);} catch (Exception e) {}}

android TextView屏蔽复制粘贴文本选择菜单相关推荐

  1. android TextView中ClickableSpan与文本自由复制(TextIsSelectable)冲突问题

    上一篇文章解决了UrlSpan与文本中url链接识别和设置的问题,超链接可以正常显示了.但由于用户期望TextView中的文章内容可以自由复制,这个需求嘛实现起来就是设置下textView.setTe ...

  2. Android EditText禁止复制粘贴

    1,自定义EditText package com.example.ui; import android.annotation.SuppressLint; import android.content ...

  3. 【问题解决】微软OneNote使用笔记,Ditto解决OneNote复制粘贴文本输出图片问题

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 白嫖用onenote和onedrive有段时间了,简单粗暴好用,没得说. 先总结(BB ...

  4. Android实现一键复制粘贴,兼容低版本系统(api 11以下)

    Android实现一键复制粘贴,兼容低版本系统(api11以下) /**         * 实现文本复制功能         * @param content         * @return t ...

  5. 【转】vi编辑器中如何复制粘贴文本

    转自:http://old.blog.edu.cn/user2/icethawless/archives/2006/1489681.shtml vi中多个文件相互之间的复制.粘贴功能简介 大家在vi编 ...

  6. vim可视模式下复制粘贴文本

    [操作步骤] vim编辑器有两种操作模式:普通模式.插入模式.当打开要编辑的文件时,vim编辑器会进入普通模式.在普通模式下按 i 键进入插入模式,在插入模式下按 Esc 键返回普通模式. 在普通模式 ...

  7. VirtualBox 中 Ubuntu 16.04 虚拟机与主机之间复制粘贴文本

    VirtualBox 中 Ubuntu 16.04 虚拟机与主机之间复制粘贴文本 1. Settings -> General -> Advanced Bidirectional 2. 设 ...

  8. linux内如何复制粘贴文本

    linux内如何复制粘贴文本 在终端中使用键盘快捷键进行复制粘贴 为什么 Linux 终端不使用"通用"的 Ctrl+C 和 Ctrl+V 在终端中使用键盘快捷键进行复制粘贴 在 ...

  9. OneNote | 复制粘贴文本输出图片解决方案

    OneNote | 复制粘贴文本输出图片解决方案 OneNote粘贴问题 Solution 1: 中转 Solution 2: 外部软件(推荐) Ditto使用教程1 Ditto使用教程2(推荐) O ...

  10. adb 命令 pc端 复制粘贴 文本到android设备

    假如你像我一样在寻找android下通过命令复制粘贴的方法. 不过android上是没有直接进行复制粘贴剪切板的命令,只有间接实现: 1.android设备 首先android设备上,要把光标焦点定位 ...

最新文章

  1. WPF-002 下拉列表的简单实现
  2. sqlite3 多线程 c语言,sqlite3 c语言编程 之 三个基本函数
  3. 在Ngnix上部署Flask应用
  4. 看完这篇,你也是字符编码大神!
  5. Cilium 首次集成国内云服务,阿里云 ENI 被纳入新版本特性
  6. 在 MySQL 中使用 explain 查询 SQL 的执行计划(转自: 数据分析与开发)
  7. Visual Studio 2017 ASP.NET Core开发
  8. python——成语接龙小游戏
  9. 如何进行云主机带宽测试
  10. 2.Shell 编程从入门到精通 --- Shell编程基础
  11. 小爱mini改aux立体声_拆解报告:Redmi小爱音箱Play
  12. 万年历显示c语言百度文库,C语言万年历
  13. python dataframe修改_pandas DataFrame的修改方法
  14. java 避免gc_减少JAVA GC
  15. T88 excel 行高列宽单位
  16. 高德POI搜索:地点关键词搜索
  17. c++——vc++中的六种Runtime Library的类型
  18. C语言基础——字符串指针(指向字符串的指针)
  19. 三星SCX-4521F 4725F内存接收墨粉用尽问题
  20. 读《赤脚医生手册》有感之葱豉汤

热门文章

  1. php背景图片居中对齐命令,css怎么设置背景图片自适应居中
  2. Raki的读paper小记:Code and Named Entity Recognition in StackOverflow
  3. mycat管理mysql_Mycat用户和权限控制管理
  4. Centos7 安装MySQL5
  5. jquery migrate 应用迁移辅助插件
  6. php dom 分离html内容
  7. Syslog日志中心服务器收集windows和linux客户端日志
  8. a:link,a:visited,a:hover,a:active
  9. 一线城市房价下跌 机构称年内限购难放松
  10. 矩阵快速乘法---代码