Эта проблема наблюдается только на устройствах Samsung с Android 6.0 . Он отлично работает на всех других устройствах, включая устройства не-Samsung с Android 6.0 и Samsung с Android 5.1 и ниже.
В настоящее время у нас нет устройства Samsung с Android 6.0 для быстрой проверки на нем, но мы скоро организуем это.
Функция, в которой мы используем это:
Пользователь долго нажимает на слово из предложения в TextView, а затем пользователь может редактировать выбранное слово.
Мы выполняем это следующим образом:
Проблема, с которой мы сталкиваемся:
textView.getSelectionStart () возвращает правильный начальный индекс, но textView.getSelectionEnd () возвращает значение начального индекса вместо конечного индекса. У нас есть условие защиты, что всякий раз, когда начальный и конечный индексы совпадают, выбор делается для пробела, и поэтому мы его игнорируем, поэтому все выборки слов на устройствах Samsung с Android 6.0 и выше игнорируются, что приводит к сбою функции.
Мы попробовали:
Фрагменты кода:
tvText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return false; // true = create the ActionMode
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
});
tvText.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
final TextView textView = (TextView) v;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//This works correct on all devices with Android 6.0
int startIndex = textView.getSelectionStart();
//This works wrong on Samsung devices with Android 6.0, result is same as getSelectionStart()
int endIndex = textView.getSelectionEnd();
//The guard condition where we ignore the empty selections
if ((endIndex - startIndex) <= 0) {
return;
}
// Do bunch of things to UI like applying some different foreground colors to the selected word, striking out selected word etc.
}
}, TEXT_LONG_PRESS_DELAY);
return false;
}
});
XML-код для TextView и его стиль: