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