xamarin android - 双击选择所有edittext

时间:2018-03-19 11:56:41

标签: android xamarin.android

我试图通过创建GestureDetector和侦听器并在onDoubleTap中执行selecteAll来双击EditText(不是文本本身而是文本外的空白区域)时选择所有文本。 不幸的是,在选择所有文本后,文本将被取消选择。

如果双击EditText空白区,如何选择所有文本? 谢谢!

自定义EditText:

public class TextEditText : EditText, View.IOnTouchListener
    {
        GestureDetector gestureDetector;

        public TextEditText(Context context) : base(context)
        {
            Init();
        }

        public TextEditText(Context context, IAttributeSet attrs) :
            base(context, attrs)
        {
            Init();
        }

        public TextEditText(Context context, IAttributeSet attrs, int defStyle) :
            base(context, attrs, defStyle)
        {
            Init();
        }

        public TextEditText(IntPtr a, Android.Runtime.JniHandleOwnership b) : base(a, b)
        {
            Init();
        }

        void Init()
        {
            gestureDetector = new GestureDetector(new SelectTextDoubleTapListener(this));
            SetOnTouchListener(this);
        }

        public bool OnTouch(View v, MotionEvent e)
        {
            return gestureDetector.OnTouchEvent(e);
        }
    }

然后是听众:

public class SelectTextDoubleTapListener : GestureDetector.SimpleOnGestureListener
    {
        EditText editText;

        public SelectTextDoubleTapListener(EditText et)
        {
            editText = et;
        }

        public override bool OnDoubleTap(MotionEvent e)
        {
            if (editText.Text.Length > 0)
            {
                editText.SetSelection(editText.Text.Length);
                editText.SelectAll();
            }

            return false; // return true does not work either
        }
    }

1 个答案:

答案 0 :(得分:0)

  

不幸的是,在选择所有文本之后,文本将被取消选择。

我使用SetSelectAllOnFocus(true)中的OnDoubleTap来解决此问题
例如:

    public override bool OnDoubleTap(MotionEvent e)
    {            
        if (editText.Text.Length > 0)
        {
            editText.SetSelectAllOnFocus(true);
            editText.ClearFocus();
        }            
        return true; 
    }