/// <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(); }