Android: How to TOTALLY disable copy and paste function in Edittext

后端 未结 4 1132
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-11 19:38

I am quite new to Android developing area and recently I hv encountered a tough problem.

I was trying to make a Edittext which should NOT ALLOW user to copy content

4条回答
  •  有刺的猬
    2020-12-11 20:04

    You can totally hide "select all, copy and paste" menu and also "paste" function which pop up when simple tap on the cursor.

    For that you have to create a custom EditText class. Here is an example...

    // Custom EditText class
    public class NoMenuEditText extends EditText
    {
        private final Context context;
    
        /** This is a replacement method for the base TextView class' method of the same name. This 
        * method is used in hidden class android.widget.Editor to determine whether the PASTE/REPLACE popup
        * appears when triggered from the text insertion handle. Returning false forces this window
        * to never appear.
        * @return false
        */
        boolean canPaste()
        {
            return false;
        }
    
        /** This is a replacement method for the base TextView class' method of the same name. This method
        * is used in hidden class android.widget.Editor to determine whether the PASTE/REPLACE popup
        * appears when triggered from the text insertion handle. Returning false forces this window
        * to never appear.
        * @return false
        */
        @Override
        public boolean isSuggestionsEnabled()
        {
            return false;
        }
    
        public NoMenuEditText(Context context)
        {
            super(context);
            this.context = context;
            init();
        }
    
        public NoMenuEditText(Context context, AttributeSet attrs)
        {
            super(context, attrs);
            this.context = context;
            init();
        }
    
        public NoMenuEditText(Context context, AttributeSet attrs, int defStyle)
        {
            super(context, attrs, defStyle);
            this.context = context;
            init();
        }
    
        private void init()
        {
            this.setCustomSelectionActionModeCallback(new ActionModeCallbackInterceptor());
            this.setLongClickable(false);
        }
    
    
        /**
        * 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
        {
            private final String TAG = NoMenuEditText.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) {}
        }
    } 
    

    Use this EditText in your layout. Now, it will not show any copy/paste menu. It will show only blue handle but when you click on that you will not get any pop up of paste option.

    Hope this helps...

提交回复
热议问题