Android EditText禁止復制粘貼
1,自定義EditText package com.example.ui; import android.annotation.SuppressLint; import android.content.Context; import android.util.AttributeSet; import android.view.ActionMode; import android.view.Menu; import android.view.MenuItem; import android.widget.EditText;@SuppressLint("NewApi") 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) {
}
}
}
2,在layout.xml文件中這樣使用
<com.example.ui.NoMenuEditText
android:id="@+id/ddd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="禁止復制粘貼" /></pre>