长按“编辑文本”时,会限制/删除自动填充选项

时间:2019-04-10 12:23:42

标签: android android-autofill-manager

我有一个编辑文本,长按它时,我不希望将自动填充选项包括在侧面复制,粘贴,选择等中

我尝试执行以下代码,但对我没有帮助

if (Build.VERSION.SDK_INT >= 26) {
            AutofillManager autofillManager = cxt.getSystemService(AutofillManager.class);
            if (null != autofillManager) {
                view.setImportantForAutofill(IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
                autofillManager.disableAutofillServices();
                autofillManager.cancel();
            }
        }

我希望“自动填充”选项不应列出,但应与复制,粘贴,选择等一起列出

2 个答案:

答案 0 :(得分:0)

您可以通过自定义EditText类来执行此操作,只需执行以下步骤:

1)扩展EditText类,

2)覆盖isSuggestionsEnabled()return false

3)创建一个canPaste()方法并返回false。这是方法隐藏。

如果仍然无法使用,您也可以在EditText中禁用长按。

mEditText.setLongClickable(false);

并通过以下方法返回false来禁用上下文菜单的显示:

mEditEext.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;
            }
        });

答案 1 :(得分:0)

答案与我在此处给出的答案几乎完全相同: https://stackoverflow.com/a/59870250/7729375

唯一的区别是removeItem的目标ID现在为android.R.id.autofill,并且它需要API 26(Android O)的注释

Java:

ActionMode.Callback callback = new ActionMode.Callback() {
            @Override
            @TargetApi(26)
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                if (menu != null) {
                    menu.removeItem(android.R.id.autofill);
                }
                return true;
            }

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return true;
            }

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

            @Override
            public void onDestroyActionMode(ActionMode mode) {

            }
        };

        mEditText.setCustomInsertionActionModeCallback(callback);

        mEditText.setCustomSelectionActionModeCallback(callback);

科特琳:

val callback = object : ActionMode.Callback {
    override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
        return false
    }

    @TargetApi(Build.VERSION_CODES.O)
    override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
        menu?.removeItem(android.R.id.autofill)
        return true
    }

    override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
        return true
    }

    override fun onDestroyActionMode(mode: ActionMode?) {}
}

然后在EditText中使用站点:

fun preventPaste() {
    customInsertionActionModeCallback = callback
    customSelectionActionModeCallback = callback
}