How to disable copy/paste from/to EditText

后端 未结 24 1691
情歌与酒
情歌与酒 2020-11-22 12:18

In my application, there is a registration screen, where i do not want the user to be able to copy/paste text into the EditText field. I have set an onLon

24条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-22 12:41

    Try Following custome class for prevant copy and paste in Edittext

    public class SegoeUiEditText extends AppCompatEditText {
    private final Context context;
    
    
    @Override
    public boolean isSuggestionsEnabled() {
        return false;
    }
    public SegoeUiEditText(Context context) {
        super(context);
        this.context = context;
        init();
    }
    
    public SegoeUiEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        init();
    }
    
    public SegoeUiEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.context = context;
        init();
    }
    
    
    private void setFonts(Context context) {
        this.setTypeface(Typeface.createFromAsset(context.getAssets(), "Fonts/Helvetica-Normal.ttf"));
    }
    
    private void init() {
    
            setTextIsSelectable(false);
            this.setCustomSelectionActionModeCallback(new ActionModeCallbackInterceptor());
            this.setLongClickable(false);
    
    }
    @Override
    public int getSelectionStart() {
    
        for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
            if (element.getMethodName().equals("canPaste")) {
                return -1;
            }
        }
        return super.getSelectionStart();
    }
    /**
     * Prevents the action bar (top horizontal bar with cut, copy, paste, etc.) from appearing
     * by intercepting the callback that would cause it to be created, and returning false.
     */
    private class ActionModeCallbackInterceptor implements ActionMode.Callback, android.view.ActionMode.Callback {
        private final String TAG = SegoeUiEditText.class.getSimpleName();
    
        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) {}
    
        @Override
        public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
            return false;
        }
    
        @Override
        public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) {
            menu.clear();
            return false;
        }
    
        @Override
        public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) {
            return false;
        }
    
        @Override
        public void onDestroyActionMode(android.view.ActionMode mode) {
    
        }
    }
    

    }

提交回复
热议问题