Отключить мягкую клавиатуру из EditText, но разрешить копирование / вставку?

Привет, я создаю пользовательский дозвон, чтобы создать свой собственный входной блок.

Проблема в том, как отключить EditText, но разрешить вырезать / скопировать / вставить? Продвинутый пользователь может сделать это.

Я пробовал android:focusable="false" но он отключает вырезание / копирование (может все же вставить).

Я также попытался отключить inputType программно, что отключает все три команды:

 myEditText.setInputType(InputType.TYPE_NULL); //Can't cut/copy/paste 

Отключение его из манифеста также не работает:

 android:configChanges="orientation|keyboardHidden" //Keyboard still popped up 

Любое решение? благодаря

Solutions Collecting From Web of "Отключить мягкую клавиатуру из EditText, но разрешить копирование / вставку?"

После нескольких часов и часов исследований я наконец нашел решение, которое работает для всех версий API. Надеюсь, это сэкономит чье-то время.

Если вы разрабатываете API> = 11, решение прост:

1) Добавьте два свойства ниже в xml-файл EditText

 android:inputType="none" android:textIsSelectable="true" 

или

2) Программно выполните следующие действия:

 myEditText.setInputType(InputType.TYPE_NULL); myEditText.setTextIsSelectable(true); 

И вы сделали.

Если вы хотите обслуживать API <11, я обнаружил, что нет возможности отключить клавиатуру от выхода, если вы хотите выбрать текст для цели копирования. Настройка focusable на false отключит клавиатуру, но это не поможет, потому что она отключает вашу возможность также выбирать текст. Любые другие решения, которые я нашел в stackoverflow, либо не работают, либо отключают выбор текста одновременно.

Один уродливый способ решить это как таковой ..

Сначала добавьте это свойство в xml-файл EditText

 android:editable="false" 

Да, это устарело, но необходимо, чтобы EditText не редактировался в версии API <11.

Затем нам нужно будет скрыть клавиатуру, как только она появится, чтобы мы могли продолжать выбирать текст без блокировки клавиатуры.

Используйте этот код ниже для обнаружения появления клавиатуры (решение получено из https://stackoverflow.com/a/9108219/1241783 ) и немедленно скройте его.

 if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { final View activityRootView = findViewById(R.id.activityRoot); activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); //r will be populated with the coordinates of your view that area still visible. activityRootView.getWindowVisibleDisplayFrame(r); int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top); if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... //Hide the keyboard instantly! if (getCurrentFocus() != null) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } } } }); } 

Это работает для моего дела. Хотя вы можете видеть, что клавиатура появляется в течение секунды секунды (что является уродливой частью), но я не могу думать о другом способе заставить это работать на момент написания. Если у вас есть лучшее решение, оставьте комментарий!

Дайте мне знать, если это спасет чье-то время 🙂

Чтобы отключить отображение мягкой клавиатуры, сохраняя функцию копирования / вставки и курсора, просто добавьте эту строку в свою деятельность:

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 

Поскольку текущий верхний ответ использует устаревший метод и не имеет метода вставки для меня, вот еще один способ, который не использует старые методы. Но он пытается использовать скрытый метод посредством отражения с отступлением. знак равно

Я подклассифицировал EditText в новый виджет KeyboardlessEditText который по-прежнему сохраняет все классные функции редактирования без показа клавиатуры. Просто запустите файл и идите.

Полный код для этого сообщения немного длинный, но пока GitHub не опустится, это будет работать: https://github.com/danialgoodwin/android-widget-keyboardless-edittext/blob/master/KeyboardlessEditText2 .Ява

попробуй это

  EditText et = ... // your EditText et.setKeyListener(null) //makes the EditText non-editable so, it acts like a TextView. 

Нет необходимости в подклассе. Основное отличие этого и сделать ваш EditText неактивным, заключается в том, что EditText по-прежнему имеет свой собственный указатель – вы можете выбрать текст и т. Д. Все, что он делает, это подавление IME от появления собственной мягкой клавиатуры.

Чтобы отключить автоматическую всплывающую EditText клавиатуры для EditText или TextView выполните следующие действия:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { editTextView.setShowSoftInputOnFocus(false); } else { editTextView.setTextIsSelectable(true); //NB Accepting the case when non editable text will be selectable }