Nativescript Android - 隐藏键盘

时间:2016-07-18 18:32:30

标签: nativescript

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

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

  • 获取另一个元素(标签)的引用并在页面的onLoaded事件中调用lbl.focus()
  • 获取用户名文本字段的引用并调用txt.dismissSoftInput()和txt.android.clearFocus()

这些都不起作用。是否有其他方法可以在加载页面时隐藏键盘?

谢谢

4 个答案:

答案 0 :(得分:4)

所以我最终实现了一个不同的解决方案。这可能不是最好的方法,但它在我的情况下达到了它的目的,我想为那些面临类似情况的人分享它。

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



    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)以允许字段获得焦点。

此时加载页面时没有任何字段需要对焦且键盘隐藏。如果用户点击键盘将出现的任何字段,他们可以照常登录。

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

答案 1 :(得分:3)

我猜用户名字段是textview或textfield。如果是这样,请在loaded回调中尝试此操作:

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

答案 2 :(得分:2)

您希望清除 SELECT * FROM root r WHERE r.is_approved = true AND r.posted_by = "' + first.posted_by + '" AND r.location = "' + first.location + '" 回调中字段的焦点:

loaded

答案 3 :(得分:0)

将上述两个技巧结合起来怎么样?

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)
   }
}