如何在 android 中为 mvvmcross 使用 OnFocousChange

How to use OnFocousChange for mvvmcross in android

我正在尝试在 xamarin 中为 editText 检测 OnFocousChange 以关闭外部编辑文本的键盘时钟

edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                hideKeyboard(v);
            }
        }
});

由于 setOnFocusChangeListener 在 xamarin 中不可用,我尝试使用

    staticTextFragrance.FocusChange += (object sender, View.FocusChangeEventArgs e) => {
                    hideKeyboard();
};

它不工作,如何解决这个问题!!

我建议使用 android 输入管理器来检测何时处理文本编辑框以外的任何地方的点击,并相应地关闭键盘。您肯定不想为每个需要输入的控件处理非焦点事件。因此,更全局的方法是标准模式。

这是一个粗略的例子:

private EditText tbUsername;
private EditText tbPassword;
private InputMethodManager imm;

protected override void OnCreate(Bundle savedInstanceState)
{
      base.OnCreate(savedInstanceState);

      SupportActionBar.Title = "Login";

      FindViewById<Button>(Resource.Id.btnLogin).Click += LoginActivity_Click;

      tbUsername= FindViewById<EditText>(Resource.Id.tbUsername);
      tbPassword = FindViewById<EditText>(Resource.Id.tbPassword);

      imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
 }

private async void LoginActivity_Click(object sender, System.EventArgs e)
{
      imm.HideSoftInputFromWindow(tbUsername.WindowToken, 0);
      imm.HideSoftInputFromWindow(tbPassword.WindowToken, 0);
}

Xamarin 开发人员指南可在此 Link.

找到

这也可以通过以下方式完成:

public override bool DispatchTouchEvent(MotionEvent ev)
{
     hideKeyboard();
         return base.DispatchTouchEvent(ev);
}

public void hideKeyboard()
    {
        InputMethodManager inputManager = (InputMethodManager)GetSystemService(Context.InputMethodService);
        var currentFocus = CurrentFocus;
        if (currentFocus != null)
        {
            inputManager.HideSoftInputFromWindow(currentFocus.WindowToken, HideSoftInputFlags.None);

        }
    }