簡體   English   中英

長按編輯文本時限制/刪除自動填充選項

[英]Restrict/remove autofill option on long press of Edit text

我有一個編輯文本,長按它我不希望自動填充選項包含在側面復制、粘貼、選擇等中

我嘗試執行以下代碼,但對我沒有幫助

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();
            }
        }

我預計不應列出自動填充選項,但它與復制、粘貼、選擇等一起列出

您可以通過自定義 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;
            }
        });

答案幾乎和我在這里給出的完全一樣: https : //stackoverflow.com/a/59870250/7729375

唯一的區別是 removeItem 的目標 Id 現在是android.R.id.autofill並且它需要 API 26 (Android O) 的注釋

爪哇:

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM