【问题标题】:long press and drag on edittext to select text android长按并拖动edittext以选择文本android
【发布时间】:2017-07-04 14:20:26
【问题描述】:

我是安卓新手。我试图实现长按,然后拖动以选择编辑文本中的文本。我使用 onTouchListner 来设置选择。选择部分工作正常,但我在实现这一点时遇到了一些问题。

  1. 键盘没有弹出。
  2. 文本选择句柄未显示。
  3. 无法实现长按再拖动选择文字(只是 拖动工作)。

如果有人能指出我正确的方向或分享一些非常有帮助的代码。 谢谢!

这是我的代码

public class MainActivity extends AppCompatActivity {
private float mLastTouchX;
private float mLastTouchy;
private EditText sampleET;
private int start;
private int stop;
private String log = "MAIN_ACTIVITY";
private int mActivePointerId = INVALID_POINTER_ID;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sampleET = (EditText) findViewById(R.id.sample_ET);
    sampleET.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (MotionEventCompat.getActionMasked(event)) {

                case MotionEvent.ACTION_DOWN: {
                    final float x = event.getX();
                    final float y = event.getY();
                    // start pos
                    mLastTouchX = x;
                    mLastTouchy = y;
                    Log.d(log, "Start X" + mLastTouchX);
                    Log.d(log, "Start Y" + mLastTouchy);
                    start = sampleET.getOffsetForPosition(x, y);
                    sampleET.setSelection(start);
                    // finger id saved
                    mActivePointerId = event.getPointerId(0);
                    break;
                }

                case MotionEvent.ACTION_MOVE: {
                    final float x = event.getX();
                    final float y = event.getY();
                    Log.d(log, "New X" + x);
                    Log.d(log, "New Y" + y);
                    stop = sampleET.getOffsetForPosition(x, y);
                    sampleET.setSelection(start, stop);
                    break;
                }

                case MotionEvent.ACTION_UP: {
                    mActivePointerId = INVALID_POINTER_ID;
                    break;
                }

                case MotionEvent.ACTION_CANCEL: {
                    mActivePointerId = INVALID_POINTER_ID;
                    break;
                }

                case MotionEvent.ACTION_POINTER_UP: {
                    final int pointerIndex = MotionEventCompat.getActionIndex(event);
                    final int pointerId = event.getPointerId(pointerIndex);
                    if (pointerId == mActivePointerId) {
                        // active pointer up. Choose a new
                        // active pointer and adjust.
                        final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
                        mLastTouchX = event.getX(newPointerIndex);
                        mLastTouchy = event.getY(newPointerIndex);
                        mActivePointerId = event.getPointerId(newPointerIndex);
                    }
                    break;
                }
            }
            return true;
        }
    });
}

}

【问题讨论】:

  • 我已经设法通过检测对编辑文本的点击以编程方式调出键盘,但文本选择句柄没有运气。如果有人能帮我弄清楚那部分。

标签: android android-edittext


【解决方案1】:

我认为您要做的是选择 editText 中的文本对吗?编辑您的布局并将以下行添加到editText

android:selectAllOnFocus="true"

【讨论】:

    【解决方案2】:

    我相信默认情况下 EditText 具有您需要的操作。默认情况下弹出的文本选择句柄和键盘已经实现,您可能已经使用自定义的 onTouchListener 覆盖了该功能。

    如果您正在寻找 EditText 上的自定义功能,我建议您使用自己的自定义视图扩展 EditText,然后根据您的要求创建自定义方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多