在输入字段模糊时隐藏 Nativescript 中的 Android 键盘
Hide Android keyboard in Nativescript on input field blur
我有一个注册表单,其中包含多个 TextFields 和其他输入。当用户点击其中一个字段时,Android 软键盘将始终按预期显示。如果我在字段外点击,但键盘不会隐藏。有没有办法捕获此事件,以便在用户点击任何输入之外时隐藏键盘?
看来执行以下操作可以隐藏键盘
var pageContainer = page.getViewById('registration-container');
if(pageContainer.android) {
pageContainer.android.clearFocus();
}
但我不确定如何捕获每一个模糊表单输入的点击事件。我什至不确定 Android 是否可行。
您可以将点击侦听器放在父视图中,这样当您单击它时(文本字段外的任何地方),它会清除显示键盘的文本字段的焦点。你这样做的方式是清除容器的焦点,而它应该恰好是文本字段:
在XML中:
<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo">
<StackLayout tap="clearTextfieldFocus">
<Label text="Tap the button" class="title"/>
<Label text="{{ message }}" class="message" textWrap="true"/>
<TextField id="myTextfield" hint="Type here..."/>
</StackLayout>
</Page>
在page.js
中:
function clearTextfieldFocus(args) {
var layout = args.object;
var myTextfield = layout.getViewById("myTextfield");
myTextfield.android.clearFocus();
}
exports.clearTextfieldFocus = clearTextfieldFocus;
P/s: textfield 上的点击侦听器将覆盖父侦听器,因此单击 textfield 仍会获得焦点并显示键盘
这对我有用:
event.object.dismissSoftInput()
如果是 Vue,你最终会得到:
<TextView v-model="textData"
@blur="$event.object.dismissSoftInput()"
editable="true"/>
可以找到文档 here。
我发现这个更优雅:
import * as utils from "tns-core-modules/utils/utils";
import { isIOS, isAndroid } from "tns-core-modules/platform";
import { frame } from "tns-core-modules/ui/frame";
export function hideKeyboard() {
if (isIOS) {
frame.topmost().nativeView.endEditing(true);
}
if (isAndroid) {
utils.ad.dismissSoftInput();
}
}
我有一个注册表单,其中包含多个 TextFields 和其他输入。当用户点击其中一个字段时,Android 软键盘将始终按预期显示。如果我在字段外点击,但键盘不会隐藏。有没有办法捕获此事件,以便在用户点击任何输入之外时隐藏键盘?
看来执行以下操作可以隐藏键盘
var pageContainer = page.getViewById('registration-container');
if(pageContainer.android) {
pageContainer.android.clearFocus();
}
但我不确定如何捕获每一个模糊表单输入的点击事件。我什至不确定 Android 是否可行。
您可以将点击侦听器放在父视图中,这样当您单击它时(文本字段外的任何地方),它会清除显示键盘的文本字段的焦点。你这样做的方式是清除容器的焦点,而它应该恰好是文本字段:
在XML中:
<Page xmlns="http://schemas.nativescript.org/tns.xsd" navigatingTo="onNavigatingTo">
<StackLayout tap="clearTextfieldFocus">
<Label text="Tap the button" class="title"/>
<Label text="{{ message }}" class="message" textWrap="true"/>
<TextField id="myTextfield" hint="Type here..."/>
</StackLayout>
</Page>
在page.js
中:
function clearTextfieldFocus(args) {
var layout = args.object;
var myTextfield = layout.getViewById("myTextfield");
myTextfield.android.clearFocus();
}
exports.clearTextfieldFocus = clearTextfieldFocus;
P/s: textfield 上的点击侦听器将覆盖父侦听器,因此单击 textfield 仍会获得焦点并显示键盘
这对我有用:
event.object.dismissSoftInput()
如果是 Vue,你最终会得到:
<TextView v-model="textData"
@blur="$event.object.dismissSoftInput()"
editable="true"/>
可以找到文档 here。
我发现这个更优雅:
import * as utils from "tns-core-modules/utils/utils";
import { isIOS, isAndroid } from "tns-core-modules/platform";
import { frame } from "tns-core-modules/ui/frame";
export function hideKeyboard() {
if (isIOS) {
frame.topmost().nativeView.endEditing(true);
}
if (isAndroid) {
utils.ad.dismissSoftInput();
}
}