当前位置: 首页 > 知识库问答 >
问题:

Android -禁用编辑文本中的复制/粘贴-即使尝试了一些解决方案也不起作用

周马鲁
2023-03-14

我正在寻找在android中完全禁用EditText复制/粘贴的解决方案。我试过很多帖子和博客,但都没有完全奏效。注意,它可以在某些设备上使用,但在o/s为4.0.1的HTC设备上使用相同的o/s时,当用户将输入的文本按三次时,它就不起作用了。下面是我现在用于EditText的示例类。

public class CustomEditText extends EditText{
    boolean canPaste() {
       return false;
    }
    @Override
    public boolean isSuggestionsEnabled() {
        return false;
    }
    public CustomEditText(Context context) {
        super(context);
        init();
    }
    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    public CustomEditText(Context context, AttributeSet attrs, int defStyle){
        super(context, attrs, defStyle);
        this.context = context;
        init();
    }

    private void init() {
        this.setCustomSelectionActionModeCallback(new ActionModeCallbackInterceptor());
        this.setLongClickable(false);
        this.setSelected(false);
    }

    private class ActionModeCallbackInterceptor implements ActionMode.Callback {
        public boolean onCreateActionMode(ActionMode mode, Menu menu) { return false; }
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; }
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; }
        public void onDestroyActionMode(ActionMode mode) {}
    }
} 

注意:我检查了这个解决方案EditText:在文本选择处理程序单击事件上禁用粘贴/替换菜单弹出

共有2个答案

范福
2023-03-14

请尝试下面的代码

edittext.setCustomSelectionActionModeCallback(new ActionMode.Callback() {

            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            public void onDestroyActionMode(ActionMode mode) {                  
            }

            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                return false;
            }
        });
时仰岳
2023-03-14

如果您使用的是API级别11或更高,那么您可以停止复制、粘贴、剪切和自定义上下文菜单出现。

 edittext.setCustomSelectionActionModeCallback(new ActionMode.Callback()
 {
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) 
        {
            return false;
        }

        public void onDestroyActionMode(ActionMode mode)
        {                  
        }

        public boolean onCreateActionMode(ActionMode mode, Menu menu)
        {
            return false;
        }

        public boolean onActionItemClicked(ActionMode mode, MenuItem item) 
        {
            return false;
        }
    });

从方法**onCreateActionMode(ActionMode, Menu)返回false将阻止**操作模式启动(全选、剪切、复制和粘贴操作)。

更多细节

 类似资料:
  • 我正试图编写代码,从一个Android应用程序发送一条短信,但当我试图发送短信时,它给我返回了错误: 我检查了,但我拥有清单中的权限,如下所示: null null 我在网上搜索了一下,但是所有的错误都是关于语法的,你能帮我一下吗?

  • 我有一个简单的宏,它查看A1,然后复制和粘贴到另一张表的特定范围,回到原始表,然后偏移每一列,(复制和粘贴过程)直到第T列,然后下移1行并重复,然后将表保存为PDF,这个过程重复大约100次。 这两个工作表位于同一工作簿中,该工作簿在宏运行时已经打开。 请救命! 此外,这将有助于减少我的宏行太。 谢谢你的关注

  • 问题内容: 我正在尝试2个替代方法: 忽略右键 忽略+ ,+ 这是我的代码: 这是我的HTML: 该功能有效,但不起作用。 问题答案: 你不能 您可以尝试阻止某些矢量(例如,使右键单击更加困难的黑客,拦截+ ,使其难以选择文本)……但是它们只能起到某种作用,并且不可能阻止所有矢量(编辑->复制) ?查看源代码??等…)。 如果您想保护内容免受技术含量较低的用户的侵害,则可以采用这些方法……但是,正

  • 我很确定我以前做过这个,但是我找不到任何关于它的留档。我发现这个问题很难研究。 我想在屏幕上显示一段文本的一个版本(A)。但是,当文本被复制时,该文本(B)的不同版本实际上被复制到剪贴板。在实践中,A和B可能非常相似,但该技术应该允许A和B是完全不同的字符串。 例如,如果我使用

  • 问题内容: 有没有一种方法可以使用JavaScript禁用将文本粘贴到HTML表单上的文本字段的功能? 例如,我有一个简单的注册表格,要求用户输入两次电子邮件。第二个电子邮件条目是为了验证第一个电子邮件条目中没有错别字。但是,如果用户复制/粘贴他们的电子邮件,那么这将无法达到目的,并且我一直在遇到用户的问题,因为他们输入了错误的电子邮件并复制/粘贴了它。 也许我不清楚我的问题,但我并不想阻止人们在