Android原生功能:當長按EditText編輯框時,會彈出系統自帶的複制、粘貼和剪切功能。
如果在做應用開發的時候需要取消這個功能該怎麼做?
在API-11以下(也就是Android 3.0以下的版本)很簡單,隻需要在xml布局檔案中設定longClickable="false"或者代碼中把長按屬性設定成false就可以:
// xml layout file android:longClickable="false"
editText.setLongClickable(false);
在API-11以上,也就是 Android 3.0以上的版本,這個操作就無效了,需要用到以下方法:
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
Log.d(TAG, "onCreateActionMode");
showPopWindow();
return false;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
Log.d(TAG, "onPrepareActionMode");
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
Log.d(TAG, "onActionItemClicked");
return false;
}
});
因為3.0以上加入了ActionBar和ActionMode,彈出的複制粘貼等功能就是以ActionMode的方式顯示的,是以,我們隻需要調用EditText的setCustomSelectionActionModeCallback這個方法,設定一個ActionMode.Callback回調,然後在 onCreateActionMode函數中傳回false即可。
最後還要注意的是,EditText在橫屏編輯的時候會出現一個新的不同的編輯界面,這個界面裡還是可以複制粘貼的,是以也要取消這個額外的UI,加上下面這一句:
// android:imeOptions="flagNoExtractUi"
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);