Android 使用手势后,EditText不可编辑
我创建了一个edittext,它在触摸屏上移动,双击或长按键盘即可打开。它工作得很好,但我面临两个问题:Android 使用手势后,EditText不可编辑,android,android-edittext,Android,Android Edittext,我创建了一个edittext,它在触摸屏上移动,双击或长按键盘即可打开。它工作得很好,但我面临两个问题: EditText可从文本的最后一个或开始编辑。我无法选择游标的位置 编辑文本从其左角而不是从其中心拖放 touch listener的代码为: @Override public boolean onTouchEvent(MotionEvent event) { RelativeLayout.LayoutParams params = (RelativeLayout.LayoutPa
@Override
public boolean onTouchEvent(MotionEvent event)
{
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) v.getLayoutParams();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
setEnabled(true);
setCursorVisible(true);
break;
case MotionEvent.ACTION_UP:
Log.d("up", "ACTION_UP");
params.height = LayoutParams.WRAP_CONTENT;
params.width = LayoutParams.WRAP_CONTENT;
params.topMargin = (int)(event.getRawY() - (v.getHeight()/2));
params.leftMargin = (int)(event.getRawX() - (v.getWidth()/2));
txt_metaData.Xmargin= params.topMargin;
txt_metaData.YMargin= params.leftMargin;
break;
case MotionEvent.ACTION_MOVE:
Log.d("moving", "ACTION_MOVE");
params.topMargin = (int)(event.getRawY() - (v.getHeight()/2));
params.leftMargin = (int)(event.getRawX() - (v.getWidth()/2));
v.setLayoutParams(params);
break;
}
return gestureScanner.onTouchEvent(event);
}
@Override
public boolean onDown(MotionEvent e)
{
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
return true;
}
@Override
public void onLongPress(MotionEvent e)
{
Log.i("double tap called", "yes");
((InputMethodManager)_mContext.getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
setEnabled(true);
requestFocus();
requestFocusFromTouch();
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
return true;
}
@Override
public void onShowPress(MotionEvent e)
{
}
@Override
public boolean onSingleTapUp(MotionEvent e)
{
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e)
{
Log.i("double tap called", "No");
((InputMethodManager)_mContext.getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
setEnabled(true);
requestFocus();
requestFocusFromTouch();
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e)
{
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e)
{
bringToFront();
return true;
}
}