Nativescript Android - 隐藏键盘

Nativescript Android - hide keyboard

在我的 Nativescript 应用程序中,应用程序从登录页面开始。在 iOS 上一切看起来都不错,但在 android 上,用户名字段获得焦点并显示键盘。有没有办法防止这种情况发生?

到目前为止我已经尝试过:

None 这行得通。还有其他方法可以在加载页面时隐藏键盘吗?

谢谢

您想在loaded回调中清除字段的焦点:

var searchBar = page.getViewById('my-search-bar-id');
if (searchBar.android) {
    searchBar.android.clearFocus();
}

我猜用户名字段是文本视图或文本字段。如果是这样,请在 loaded 回调上尝试此操作:

var myTextview = page.getViewById("myTextView");
myTextView.dismissSoftInput();

所以我最终实施了一个不同的解决方案。这可能不是最好的方法,但它在我的案例中起到了作用,我想与那些面临类似情况的人分享它。

在页面的加载事件中,我包含了这段代码:

    if (page.android) {
        var un = page.getViewById('username');
        var p = page.getViewById('password');
        un.android.setFocusable(false);
        p.android.setFocusable(false);
        setTimeout(function () {
            un.android.setFocusableInTouchMode(true);
            p.android.setFocusableInTouchMode(true);
        }, 300);
    }

这里的关键是 setTimeout 函数(感谢 Emil Oberg 为我指明了正确的方向)。据我了解,这是正在发生的事情:

  • 页面加载后,我们在仅有的 2 个文本字段上调用 ​​setFocusable(false) 以防止 Android 将焦点设置在它们上面
  • 然后我们等待 300 毫秒让 Android 进行初始化
  • 超时执行时,调用setFocusableInTouchMode(true)让字段获得焦点。

此时页面已加载,但没有任何字段处于焦点状态并且键盘已隐藏。如果用户点击任何字段,键盘将出现,他们可以像往常一样继续登录。

正如我提到的,这可能不是最好的或正确的方法,但对我有用。希望这可以节省某人研究问题的时间。

将以上两个提示结合起来怎么样?

onClear(args) {
      const searchBar = <SearchBar>args.object;
      if (isAndroid && searchBar.android != undefined){//avoid random unpleasant error
         setTimeout(() => { // the key here was this timeout
            searchBar.android.clearFocus();
      }, 1)
   }
}