Nativescript Android - 隐藏键盘
Nativescript Android - hide keyboard
在我的 Nativescript 应用程序中,应用程序从登录页面开始。在 iOS 上一切看起来都不错,但在 android 上,用户名字段获得焦点并显示键盘。有没有办法防止这种情况发生?
到目前为止我已经尝试过:
- 获取另一个元素(标签)的引用并在页面的 onLoaded 事件中调用 lbl.focus()
- 获取用户名文本字段的引用并调用 txt.dismissSoftInput() 和 txt.android.clearFocus()
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)
}
}
在我的 Nativescript 应用程序中,应用程序从登录页面开始。在 iOS 上一切看起来都不错,但在 android 上,用户名字段获得焦点并显示键盘。有没有办法防止这种情况发生?
到目前为止我已经尝试过:
- 获取另一个元素(标签)的引用并在页面的 onLoaded 事件中调用 lbl.focus()
- 获取用户名文本字段的引用并调用 txt.dismissSoftInput() 和 txt.android.clearFocus()
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)
}
}