Android OnTouchListener计划一个线程来定位光标

Android OnTouchListener计划一个线程来定位光标,android,android-edittext,ontouchlistener,cursor-position,Android,Android Edittext,Ontouchlistener,Cursor Position,发布在“”的答案表明,未来可以将线程调度为100MS,以便Android有时间更新EditText光标位置。没有提供关于如何实现这一点的代码。我使用Toast来显示光标位置,尝试了以下测试代码。更新触摸后,它不会显示光标位置。是否有人可以更正此代码,以便在mText.setSelection(光标)中提供触摸位置 我放弃了安排一个未来的线程,让Android有时间更新光标位置。我找到了一个更好的方法来抑制软键盘,并在编辑文本框中显示一个闪烁的光标。我编写了一个onTouchListener并返回

发布在“”的答案表明,未来可以将线程调度为100MS,以便Android有时间更新EditText光标位置。没有提供关于如何实现这一点的代码。我使用Toast来显示光标位置,尝试了以下测试代码。更新触摸后,它不会显示光标位置。是否有人可以更正此代码,以便在mText.setSelection(光标)中提供触摸位置


我放弃了安排一个未来的线程,让Android有时间更新光标位置。我找到了一个更好的方法来抑制软键盘,并在编辑文本框中显示一个闪烁的光标。我编写了一个onTouchListener并返回true以禁用键盘,而不是使用“mText.setInputType(InputType.TYPE_NULL)”。然后,我必须从运动事件中获取触摸位置,以将光标设置到正确的位置

以下是我使用的代码:

  mText = (EditText) findViewById(R.id.editText1);
  OnTouchListener otl = new OnTouchListener() {
  @Override
  public boolean onTouch(View v, MotionEvent event) {
      switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
          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);

我放弃了安排一个未来的线程,让Android有时间更新光标位置。我找到了一个更好的方法来抑制软键盘,并在编辑文本框中显示一个闪烁的光标。我编写了一个onTouchListener并返回true以禁用键盘,而不是使用“mText.setInputType(InputType.TYPE_NULL)”。然后,我必须从运动事件中获取触摸位置,以将光标设置到正确的位置

以下是我使用的代码:

  mText = (EditText) findViewById(R.id.editText1);
  OnTouchListener otl = new OnTouchListener() {
  @Override
  public boolean onTouch(View v, MotionEvent event) {
      switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
          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);