Xamarin.Android给 EditText 添加焦点的扩展方法

发布时间 2023-04-25 15:51:13作者: LuoCore
    /// <summary>
        /// 定义了一个扩展方法 SetFocus,作用是设置 EditText 控件的焦点,并可以选择全部选中或者仅选中最后一个字符
        ///  给 EditText 添加焦点的扩展方法,可选择是否全部选中
        /// </summary>
        /// <param name="ed"></param>
        /// <param name="allSelect"></param>
        public static void SetFocus(this EditText ed,bool allSelect=true)
        {
            // 创建一个模拟触摸事件的 MotionEvent,模拟按下动作
            var touch = MotionEvent.Obtain(SystemClock.UptimeMillis(), SystemClock.UptimeMillis(), MotionEventActions.Down, ed.ScaleX, ed.ScaleY, 0);
            // 将模拟触摸事件 touch 分发到目标控件 ed,模拟按下动作
            ed.DispatchTouchEvent(touch);
            // 创建另外一个 MotionEvent,模拟松开动作
            touch = MotionEvent.Obtain(SystemClock.UptimeMillis(), SystemClock.UptimeMillis(), MotionEventActions.Up, ed.ScaleX, ed.ScaleY, 0);
            // 将模拟触摸事件 touch 分发到目标控件 ed,模拟松开动作
            ed.DispatchTouchEvent(touch);
            // 设置触摸聚焦
            ed.FocusableInTouchMode = true;
            // 设置输入框可聚集
            ed.Focusable = true;         
            // 请求焦点
            ed.RequestFocus();
            // 获取焦点
            ed.FindFocus();
            //模拟点击动作
            ed.PerformClick();
            // 如果需要全部选中
            if (allSelect)
            {
                // 选中全部文本
                ed.SelectAll();
            }
            else
            {
                // 判断文本框中是否有文本
                if (ed.Text?.Length > 0)
                {
                    // 将光标定位到文本末尾
                    ed.SetSelection(ed.Text.Length);
                }
            }
            // 模拟点击动作
            ed.CallOnClick();
            // 再次模拟点击动作
            ed.PerformClick();
           
        }