【发布时间】:2017-07-04 14:20:26
【问题描述】:
我是安卓新手。我试图实现长按,然后拖动以选择编辑文本中的文本。我使用 onTouchListner 来设置选择。选择部分工作正常,但我在实现这一点时遇到了一些问题。
- 键盘没有弹出。
- 文本选择句柄未显示。
- 无法实现长按再拖动选择文字(只是 拖动工作)。
如果有人能指出我正确的方向或分享一些非常有帮助的代码。 谢谢!
这是我的代码
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;
}
});
}
}
【问题讨论】:
-
我已经设法通过检测对编辑文本的点击以编程方式调出键盘,但文本选择句柄没有运气。如果有人能帮我弄清楚那部分。