В моем приложении есть экран регистрации, где я не хочу, чтобы пользователь мог копировать / вставлять текст в EditText
поле. Я установил для onLongClickListener
каждого из них, EditText
чтобы контекстное меню, показывающее метод копирования / вставки / ввода и другие параметры, не отображалось. Таким образом, пользователь не сможет копировать / вставлять в поля редактирования.
OnLongClickListener mOnLongClickListener = new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// prevent context menu from being popped up, so that user
// cannot copy/paste from/into any EditText fields.
return true;
}
};
Но проблема возникает, если пользователь включил стороннюю клавиатуру, отличную от стандартной для Android, которая может иметь кнопку для копирования / вставки или может отображать то же контекстное меню. Итак, как мне отключить копирование / вставку в этом сценарии?
Пожалуйста, дайте мне знать, есть ли другие способы скопировать / вставить. (и, возможно, как их отключить)
Любая помощь будет оценена.
Ответы:
Если вы используете API уровня 11 или выше, вы можете запретить отображение контекстных меню для копирования, вставки, вырезания и пользовательских контекстных меню.
Возврат false из onCreateActionMode (ActionMode, Menu) предотвратит запуск режима действия (действия Select All, Cut, Copy и Paste).
источник
Лучший способ - использовать:
источник
android:longClickable="false"
:)Вы можете сделать это, отключив долгое нажатие EditText
Чтобы реализовать это, просто добавьте следующую строку в xml -
источник
Я могу отключить функцию копирования и вставки следующим образом:
Надеюсь, это сработает для вас ;-)
источник
вот лучший способ отключить вырезанную копию пасты работы editText во всех версиях
источник
В дополнение к setCustomSelectionActionModeCallback и отключенным решениям с длительным щелчком необходимо предотвратить появление меню PASTE / REPLACE при щелчке маркера выделения текста, как показано на изображении ниже:
Решение заключается в том, чтобы предотвратить появление меню PASTE / REPLACE в
show()
методе (недокументированного)android.widget.Editor
класса. Перед появлением меню выполняется проверкаif (!canPaste && !canSuggest) return;
. Два метода, которые используются в качестве основы для установки этих переменных, находятся вEditText
классе:isSuggestionsEnabled()
является общедоступным и, таким образом, может быть отменено.canPaste()
не является, и поэтому должен быть скрыт путем введения функции с тем же именем в производном классе.Более полный ответ доступен здесь .
источник
Котлинское решение:
Затем вы можете просто вызвать этот метод на своем
TextView
:источник
Type mismatch
об ошибке с этим описаниемRequired:ActionMode.Callback! Found:
в этой частиobject: ActionMode.Callback
. Есть идеи, почему это может не работать?Используя другие решения, API 26 (Oreo) по-прежнему показывал дескриптор курсора одним нажатием на введенный текст, после чего можно было отобразить меню. Только комбинация решений может решить мою проблему.
источник
Если вы не хотите отключать долгий щелчок, потому что вам нужно выполнять некоторые функции при долгом щелчке, чем возврат true - лучший вариант для этого.
Ваш длинный щелчок edittext будет таким.
Согласно документации, возврат «True» будет указывать на то, что был обработан длинный щелчок, поэтому нет необходимости выполнять операции по умолчанию.
Я тестировал это на уровне API 16, 22 и 25. Он отлично работает для меня. Надеюсь, это поможет.
источник
android:longClickable="false"
в XMLhttps://github.com/neopixl/PixlUI предоставляет
EditText
методmyEditText.disableCopyAndPaste()
,И он работает на старом API
источник
Вот хитрость, чтобы отключить всплывающее окно «вставить». Вам нужно переопределить
EditText
метод:То же самое можно сделать и для других действий.
источник
Я протестировал это решение, и оно работает
источник
Прочтите буфер обмена, сравните ввод и время, когда ввод «набран». Если в буфере обмена есть тот же текст, но он слишком быстрый, удалите вставленный ввод.
источник
@Zain Ali, ваш ответ работает с API 11. Я просто хотел предложить способ сделать это и с API 10. Поскольку мне приходилось поддерживать API моего проекта в этой версии, я постоянно играл с функциями, доступными в 2.3.3, и получил возможность это сделать. Я поделился фрагментом ниже. Я протестировал код, и он работал у меня. Я сделал этот фрагмент в срочном порядке. Не стесняйтесь улучшать код, если есть какие-либо изменения, которые можно сделать ..
источник
решение очень простое
--------> предварительный просмотр <---------
источник
Попробуйте следовать классу клиентов для преобладающего копирования и вставки
Edittext
}
источник
Для смартфона с буфером обмена можно предотвратить подобное.
источник
Как и в GnrlKnowledge, вы можете очистить буфер обмена.
http://developer.android.com/reference/android/text/ClipboardManager.html
Если хотите, сохраните текст в буфере обмена, а на onDestroy вы можете установить его снова.
источник
Я обнаружил, что когда вы создаете фильтр ввода, чтобы избежать ввода нежелательных символов, вставка таких символов в текст редактирования не имеет никакого эффекта. Так что это тоже решает мою проблему.
источник
Вы можете попробовать android: focusableInTouchMode = "false".
источник
Решение, которое сработало для меня, заключалось в создании настраиваемого Edittext и переопределении следующего метода:
}
источник
Попробуй использовать.
источник
Кто ищет решение в Kotlin, используйте приведенный ниже класс в качестве настраиваемого виджета и используйте его в xml.
class SecureEditText: TextInputEditText {
}
источник
Я добавил функцию расширения на языке Kotlin :
вы можете использовать это так:
также добавил строку ниже в ваш xml:
источник