RK-3576-Android15屏蔽EditText的长按分享菜单的功能

提示:Android15屏蔽EditText的长按分享菜单的功能


前言

定制的工控产品和部分定制消费品,需求不一样和使用场景不一样,要求把长按输入框里面文字长按时候去掉分享功能。

一、 需求

如前言描述,去掉输入框中长按的输入内容,会显示其中一项分享的item菜单。
如下:
在这里插入图片描述

在这里插入图片描述

二、参考资料

这里仅提供两篇别人写的文章,实际没什么用处,版本较低原因。 但是如果之前是老版本Android 系统定制,可能能够提供一定的思路:
android 禁止分享功能,Android EditText长按菜单中分享功能的隐藏方法
EditText一些功能的屏蔽和实现方法

三、 修改文件-实现方案

修改文件

frameworks/base/core/java/android/widget/Editor.java

实现方案

把分享相关的全部去掉,如下:做了两部分工作

  • 去掉 item 加载
  • 去掉canShare 相关方法

在这里插入图片描述

在这里插入图片描述

对于 canShare 方法判定,跟踪代码:
比如如下:


           /* if (mTextView.canShare()) {
                menu.add(CONTEXT_MENU_GROUP_MISC, TextView.ID_SHARE, menuItemOrderShare,
                                com.android.internal.R.string.share)
                        .setIcon(a.getDrawable(6))
                        .setOnMenuItemClickListener(mOnContextMenuItemClickListener);
            }*/

定义编译:mTextView

   private final TextView mTextView;

所以,也可以直接在frameworks/base/core/java/android/widget/TextView.java 类中的 canShare 方法 直接返回false. 这样在 Editor.java 代码中就不用去掉 canShare 方法 的判断。

    /** @hide */
    @VisibleForTesting
    public boolean canShare() {
        if (!getContext().canStartActivityForResult() || !isDeviceProvisioned()
                || !getContext().getResources().getBoolean(
                com.android.internal.R.bool.config_textShareSupported)) {
            return false;
        }
        return canCopy();
    }

四、思路

    对于一个未知需求、问题,毫无下手情况下,建议首先 源码,当然也可以借鉴网上的,很多时候网上基本都不是你想要的,特别是不同平台、不同Android源码版本,参考没有什么实际意义。

    在没有实际思路和参考资料情况下,建议先看源码了,同时有一定的技巧。

找对应的类

实际需求明显是为了解决Editext 问题,所以就搜索Editext 源码位置:如下, Editext 相关的几个类,剩下的就是去看源码了,看有无相关的代码或片段
在这里插入图片描述

根据资源-反向查找

在资源文件strings 中找

既然上面Editext 位置是在 frameworks/base/core/java/android/widget/Editor.java 位置,那么资源位置大概率就是在frameworks 里面了。
位置:\frameworks\base\core\res\res\values-zh-rCN\strings.xml

在这里插入图片描述

反向定位grep 搜索

在这里插入图片描述
所以就找到了对应的关键关联类,然后分析一下,找下关联的代码。

五、实际效果展示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

六、拓展知识

    既然可以去掉、屏蔽、隐藏分享菜单栏,那么我们不就可以新增自己的菜单吗?如果合适需求的情况下,比如:添加AI搜索功能, 直接跳转对应的业务、界面、app进行搜索! 场景场景AI 场景、教育产品等。

这里不做具体方案实现,只是把这个知识点跑出来,实际方案完全可行的。这里在对比一下 续期方案,实现:

方案原理与效果优点缺点适用场景
方案一:禁用整个文本选择菜单阻止长按事件或阻止ActionMode创建,使所有菜单(复制、粘贴、分享等)都不弹出。简单直接,一劳永逸。用户无法进行任何文本选择操作。仅展示、不可操作的文本框。
方案二:自定义菜单项拦截菜单创建过程,仅删除“分享”等特定项,保留复制、粘贴等功能。平衡安全与体验,用户仍可使用基础编辑功能。实现稍复杂;对小米等深度定制系统可能不完全生效。需要编辑但禁止分享的输入框。

总结

  • 这里其实就是一个普通的客需,最重要的就是解决问题的思路,怎么在源码里面去找到问题点并解决,思路、方法很重要
  • 对于显示UI效果,太大等可能跟自己屏幕、系统有关, 如果实际显示效果不好,自己调试即可
  • 不同的平台、不同的Android版本源码,修改位置可能不一样,但是解决问题思路一样,必须知道。
  • 此需求给自己最大的扩展知识点:相关的基本的UI组件修改都在frameworks/base/core/java/android/widget/ 位置,后续相关需求、定制其实都是找到基础UI文件,然后进行定制即可。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野火少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值