Я пытаюсь создать EditText
, в котором текст не может быть выбран, но который все еще может быть просмотрен пользователем. Для архивирования первой функции сотворенный обычая OnTouchListener
и только ответил на ACTION_DOWN
событие, как это:EditText: разрешить прокрутку, но отключить выбор
View.OnTouchListener otl = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
scroll_down_x = event.getX();
Layout layout = ((EditText) v).getLayout();
float x = event.getX() + mText.getScrollX();
int offset = layout.getOffsetForHorizontal(0, x);
if(offset>0)
if(x>layout.getLineMax(0))
mText.setSelection(offset); // touch was at end of text
else
mText.setSelection(offset - 1);
break;
}
return true;
}
};
mText.setOnTouchListener(otl);
Но это также отключить скроллинг. Я тогда попытался reimplement
в ACTION_MOVE
события с
case MotionEvent.ACTION_MOVE:
String input = ((EditText)v).getText().toString();
float width = ((EditText) v).getPaint().measureText(input);
float cwidth = ((EditText)v).getWidth();
//only scroll when the text is too long for the control
if (width >cwidth)
{
layout = ((EditText) v).getLayout();
x = event.getX() - scroll_down_x;
offset = layout.getOffsetForHorizontal(0, x);
mText.scrollBy((int) x, mText.getScrollY());
}
return true;
Но это не работает вообще - прокрутка не очень гладко и очень неточно. Итак, как я могу улучшить этот «прокручиваемый» -код или решить проблему EditText
, в которой текст не может быть выбран, но пользователь все еще может прокручивать?
РЕДАКТИРОВАТЬ: Также пользователь должен по-прежнему изменять положение курсора.
Это действительно не решает проблему, потому что пользователь все еще может выбирать части текста - только кнопки команды для их копирования или совместного использования исчезли. – FlashTek
Какая версия Android вы проверили мое решение? – Gorio
Посмотрите мое решение в этом видео https://vimeo.com/161860272 – Gorio