Android 14.0 framework去掉长按webview界面弹框中的打开字符串

本文详细介绍了在Android 14.0系统Rom定制过程中,如何去除WebView长按后弹出的分享和打开选项。通过分析WebView及相关控件的源码,特别是FloatingToolbar类,找到在布局改变和菜单事件注册时的关键方法,并在doShow()方法中过滤MenuItem,实现移除'打开'字符串的功能。
摘要由CSDN通过智能技术生成

1.概述

在14.0系统Rom定制化开发中,在app中进入网页WebView控件加载网页后,长按网页会弹出分享和打开等等字样,但是产品需要觉得不想要这些选项 所以要求去掉这些选项所以就要
从WebView控件开始寻找相关的代码,所以要求去掉这些选项,接下来就分析下相关的流程来实现功能

2. framework去掉长按webview界面弹框中的打开字符串的核心类

frameworks/base/core/java/com/android/internal/widget/floatingtoolbar/FloatingToolbar.java

3. framework去掉长按webview界面弹框中的打开字符串的核心功能分析和实现

FloatingToolbar,这是一个由FloatingActionButton变成一个工具栏的Android UI 控件。动画效果优雅,遵循Material Design风格,
在系统内置的浏览器中相关源码中,通过相关的搜索没发现有分享 打开等相关的资源文件,所以就想在WebView等相关控件中查找相关的资源而
在系统的WebView控件中,也并没有发现分享的文字,于是就只能用Android Studio中,通过 Tools 下的Layout Inspector等开发工具
来寻找相关的布局文件,结果通过这个Android Studio中,通过 Tools 下的Layout Inspector等开发工具终于找到FloatingToolbar 字样
于是就全局搜索FloatingToolbar 查看它的布局
接下来就来看源码分析问题,从中来解决相关的问题

    public final class FloatingToolbar {
     
         /
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 以下是禁用webview按文字弹框的代码: ```java webView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { return true; } }); webView.setLongClickable(false); webView.setHapticFeedbackEnabled(false); ``` ### 回答2: 要禁用WebView按文字弹框,可以通过重写WebView的`onLongClick()`方法来实现。具体的步骤如下: 1. 创建一个自定义的WebView,继承自WebView类。 2. 在自定义的WebView重写`onLongClick()`方法。 3. 在`onLongClick()`方法,返回true,表示已经处理了按事件,不再弹出文字弹框。 4. 在应用使用自定义的WebView。 以下是一个示例代码: ```java import android.content.Context; import android.util.AttributeSet; import android.view.ActionMode; import android.webkit.WebView; public class CustomWebView extends WebView { public CustomWebView(Context context) { super(context); init(); } public CustomWebView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CustomWebView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { // 禁用按文字弹框 setLongClickable(false); // 禁用文本选择菜单 setCustomSelectionActionModeCallback(new ActionMode.Callback() { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { } }); } @Override public boolean onLongClick(View v) { // 返回true表示已经处理了按事件,不再弹出文字弹框 return true; } } ``` 你可以在应用使用这个自定义的WebView来替代原有的WebView,这样就能够禁用按文字弹框了。 ### 回答3: 要禁用WebView按文字弹框,可以通过以下几种方法实现。 第一种方法是通过设置WebSettings属性来禁用按文字弹框。可以通过获取WebView的WebSettings对象,然后调用setJavaScriptEnabled()方法将JavaScript功能禁用,这样可以阻止按文字弹框的触发。 第二种方法是通过设置WebView的OnLongClickListener来拦截按事件并返回true,这样按文字弹框就不会弹出。可以通过实现OnLongClickListener接口,然后在onLongClick()方法里返回true,表示消费了按事件,从而阻止按文字弹框的出现。 第三种方法是通过覆盖WebView的performLongClick()方法来自定义按行为。可以继承WebView类,然后重写performLongClick()方法,在方法返回false,表示不处理按事件,从而达到禁用按文字弹框的效果。 综上所述,要禁用WebView按文字弹框,可以通过设置WebSettings属性、设置WebView的OnLongClickListener或者重写WebView的performLongClick()方法来实现。具体选择哪种方法取决于具体的需求和实现方式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

安卓兼职framework应用工程师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值