Позиция OnClick в String в TextView - программирование
Подтвердить что ты не робот

Позиция OnClick в String в TextView

Я не уверен, как это сделать, но мне было интересно, есть ли способ получить позицию (индекс) в String в TextView, когда человек щелкнет где-нибудь в TextView. Итак, если кто-то нажимает на следующий TextView:

Hello I'm Vinay Hiremath.

в первом "H", событие onClick получит целое число 0. Или, если кто-то нажимает на "V", он получит 10 и т.д.

Любая помощь, как всегда, очень ценится. Не стесняйтесь называть меня идиотом и бросать камни, если это явно на Android-разработчиках.

4b9b3361

Ответ 1

Итак, я решил это решить по ссылке в комментарии Джеймса Мур здесь. В итоге я использовал решение Tony Blues. Это решение таково:

1.) Установите onTouchListener в TextView.

2.) Получите макет TextView.

3.) Получите координаты x, y касания через событие.

4.) Найдите строку и смещение (индекс) на основе этого события.

Следующий пример кода - это то, как можно было бы использовать (в подробном) индекс касания, заданный обработкой имени TextView:

manip.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Layout layout = ((TextView) v).getLayout();
        int x = (int)event.getX();
        int y = (int)event.getY();
        if (layout!=null){
            int line = layout.getLineForVertical(y);
            int offset = layout.getOffsetForHorizontal(line, x);
            Log.v("index", ""+offset);
        }
        return true;
    }
});

РЕДАКТОР: Рахул Мандалия привлек мое внимание, что этот код не сработает, если в текстовом представлении есть отступы. К сожалению, прошло очень много времени с тех пор, как я написал любой Android-код, поэтому я не уверен, как обновить этот ответ для учетной записи. Интуитивно кажется, что вы можете сделать какую-то проверку против события click, если знаете значение дополнения. Извините, что я не могу быть более полезным в этом случае.: - (

Ответ 2

Если вы выполняете принятый ответ, вы можете заметить, что событие onTouch создается более одного раза каждый раз, когда пользователь касается экрана. Используйте event.getAction(), чтобы узнать, какие действия обрабатываются. Это зависит от поведения пользователя, вызвавшего событие. Например, при простом касании экрана событие onTouch срабатывает дважды с действиями ACTION_DOWN и ACTION_UP. Для касания и перемещения вы будете получать разные действия в зависимости от перемещения (внутри элемента управления, извне внутрь, или наоборот). Подробнее см. MotionEvent.

Следующий код представляет собой модифицированную версию принятого ответа, которая обрабатывает только действие ACTION_DOWN:

manip.setOnTouchListener(new View.OnTouchListener() {
  public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
      Layout layout = ((TextView) v).getLayout();
      int x = (int)event.getX();
      int y = (int)event.getY();
      if (layout!=null){
          int line = layout.getLineForVertical(y);
          int offset = layout.getOffsetForHorizontal(line, x);
          Log.v("index", ""+offset);
          }
    }
    return true;
  }
});

Ответ 3

1) Возьмите список.

2) разделите эту строку на отдельный символ.

3) возьмите setOnItemClickListener (новое событие OnItemClickListener()).

4) показать Toast для каждого символа с помощью аргументов charcter.

Это поможет вам.

Ответ 4

Возьмите это с щепоткой соли, поскольку у меня не было возможности проверить это.

Установите атрибут android:textIsSelectable в true для TextView, а затем используйте getSelectionStart() и getSelectionEnd().

Снова я действительно просто получаю обоснованное предположение.