天天看點

Android EditText 取消複制粘貼剪貼功能

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