Я делаю вертикаль EditText
для традиционного монгольского. Я успешно реализовал это, вставив слегка измененный EditText
внутрь повернутого ViewGroup
. Мне нужно создать полностью настраиваемое контекстное меню, потому что системное не поддерживает вертикальный текст, а также не поворачивается при повороте ViewGroup
. Поэтому я хочу вообще отключить системное контекстное меню.
Обратите внимание, что это отличается от этих вопросов, которые просто пытаются отключить копирование / вставку и т. Д .:
- Как отключить копирование / вставку из / в EditText
- EditText: отключить вставку / замену всплывающее меню при нажатии на обработчик выбора текста
- как отключить параметр вставки в Android EditText
- Android: как ПОЛНОСТЬЮ отключить функцию копирования и вставки в Edittext
Хотя в симуляторе не появляется контекстное меню, оно появляется в моем телефоне Xiaomi с Android 5.0.2.
Я пытался:
setCustomSelectionActionModeCallback
"решение"setLongClickable(false);
"решение"onTouchEvent
"решение"
Я открыт для взлома, но мне нужно, чтобы он работал на всех устройствах. Марк Мерфи (сотрудник Commons) написал некоторое время назад в ответ другому пользователю, пытающемуся сделать что-то подобное:
Я подозреваю, что даже если вы дадите ответ, он не будет работать на всех устройствах. Производители устройств имели тенденцию создавать собственное «контекстное меню» для EditText, отбивая попытки разработчиков добавить элементы в это контекстное меню. Я предполагаю, что попытка заблокировать это контекстное меню будет иметь аналогичные результаты.
Мне не повезло?
Единственное, о чем я могу сейчас думать, - это полностью переписать TextView
и EditText
с нуля (ну, изменив исходный код Android). Я знаю кого-то еще, кто делал что-то подобное, но его код не является открытым исходным кодом. Прежде чем я сделаю этот важный шаг, я хочу попробовать попросить более простое решение здесь, в Stack Overflow.
Обновление. Я пытался изменить TextView
исходный код в течение последних двух дней, и это похоже на шестимесячный проект. Это масса взаимосвязанных классов. Мне нужно другое решение, но у меня нет идей.
MVCE
Это самый простой способ воссоздать проблему. От моего кастома EditText
нет ничего нужного. В макете есть единственный EditText
, созданный путем замены TextView
проекта Hello World по умолчанию. Я изменил min API на 11, чтобы избежать использования устаревших методов.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText = (EditText) findViewById(R.id.edit_text);
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { return false; }
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { return false; }
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { return false; }
@Override
public void onDestroyActionMode(ActionMode actionMode) { }
});
}
}
Контекстное меню в симуляторе (с запущенным API 24) все еще отображается, когда я нажимаю на дескриптор курсора (но не при долгом или двойном щелчке). Вот изображение:
На моем телефоне Xiaomi MIUI под управлением Android 5.0 я получаю контекстное меню во всех ситуациях (щелчок маркера курсора, долгий щелчок, двойной щелчок).
Обновлять
Решение Аритры Роя работает в симуляторе, на некоторых других устройствах, которые он тестировал, и на моем устройстве. Я принял его ответ, потому что он решает мою первоначальную проблему. Единственный отрицательный побочный эффект - также отключено выделение текста.
EditText
- здесь, на GitHub. - person Suragch   schedule 18.01.2017