键盘
自定义和处理屏幕键盘的存在是开发者在构建移动应用和 PWA 时面临的两个常见障碍。本指南将介绍可用于管理应用中屏幕键盘的各种工具。
inputmode
inputmode 属性允许开发者指定输入框中可能输入的数据类型。这将提示浏览器显示一个键盘,其中包含与用户可能输入内容相关的按钮。例如,inputmode="email" 将显示带有 @ 键以及其他针对输入电子邮件优化的键盘。
由于 inputmode 是一个全局属性,它可以在 Ionic 组件(如 ion-input 和 ion-textarea)以及常规 input 元素上使用。
需要 特定数据类型的输入框应使用 type 属性。例如,需要电子邮件的输入框应使用 type="email" 而不是指定 inputmode。这是因为输入的数据始终是电子邮件形式。另一方面,如果输入框接受电子邮件或用户名,使用 inputmode="email" 是合适的,因为输入的数据不总是电子邮件地址。
有关可接受值的列表,请参阅 inputmode 文档。
用法
- JavaScript
- Angular
- React
- Vue
<ion-item>
<ion-label>用户名或电子邮件</ion-label>
<ion-input inputmode="email"></ion-input>
</ion-item>
<ion-item>
<ion-label>输入数字</ion-label>
<ion-textarea inputmode="numeric"></ion-textarea>
</ion-item>
<ion-item>
<ion-label>用户名或电子邮件</ion-label>
<ion-input inputmode="email"></ion-input>
</ion-item>
<ion-item>
<ion-label>输入数字</ion-label>
<ion-textarea inputmode="numeric"></ion-textarea>
</ion-item>
<IonItem>
<IonLabel>用户名或电子邮件</IonLabel>
<IonInput inputmode="email"></IonInput>
</IonItem>
<IonItem>
<IonLabel>输入数字</IonLabel>
<IonTextarea inputmode="numeric"></IonTextarea>
</IonItem>
<ion-item>
<ion-label>用户名或电子邮件</ion-label>
<ion-input inputmode="email"></ion-input>
</ion-item>
<ion-item>
<ion-label>输入数字</ion-label>
<ion-textarea inputmode="numeric"></ion-textarea>
</ion-item>
inputmode 属性在运行 Chrome 66+ 和 iOS Safari 12.2+ 的设备上支持:https://caniuse.com/#search=inputmode
enterkeyhint
enterkeyhint 属性允许开发者指定"Enter"键应显示的操作标签或图标类型。使用 enterkeyhint 让用户知道点击"Enter"键时会发生什么。此处应指定的值取决于用户正在执行的操作的上下文。例如,如果用户在搜索框中输入,开发者应确保输入框具有 enterkeyhint="search"。
由于 enterkeyhint 是一个全局属性,它可以在 Ionic 组件(如 ion-input 和 ion-textarea)以及常规 input 元素上使用。
有关可接受值的列表,请参阅 enterkeyhint 标准。
用法
- JavaScript
- Angular
- React
- Vue
<ion-item>
<ion-label>输入搜索查询</ion-label>
<ion-input enterkeyhint="search" type="search"></ion-input>
</ion-item>
<ion-item>
<ion-label>输入搜索查询</ion-label>
<ion-input enterkeyhint="search" type="search"></ion-input>
</ion-item>
<IonItem>
<IonLabel>输入搜索查询</IonLabel>
<IonInput enterkeyhint="search" type="search"></IonInput>
</IonItem>
<ion-item>
<ion-label>输入搜索查询</ion-label>
<ion-input enterkeyhint="search" type="search"></ion-input>
</ion-item>
enterkeyhint 属性在运行 Chrome 77+ 和 iOS Safari 13.4+ 的设备上支持。
深色模式
默认情况下,键盘主题由操作系统决定。例如,如果在 iOS 上启用了深色模式,即使您的应用程序的 CSS 中没有深色主题,应用中的键盘也会显示深色主题。
当在移动 Web 浏览器中或作为 PWA 运行应用时,无法强制键盘以特定主题显示。
当在 Capacitor 或 Cordova 中运行应用时,可以强制键盘以特定主题显示。有关此配置的更多信息,请参阅 Capacitor 键盘文档。
隐藏辅助栏
在运行任何基于 Web 的应用程序时,iOS 会在键盘上方显示一个辅助栏。这允许用户移动到下一个或上一个输入框,以及关闭键盘。
当在移动 Web 浏览器中或作为 PWA 运行应用时,无法隐藏辅助栏。
当在 Capacitor 或 Cordova 中运行应用时,可以隐藏辅助栏。有关此配置的更多信息,请参阅 Capacitor 键盘文档。
键盘生命周期事件
检测屏幕键盘的存在对于调整输入框的位置很有用,否则输入框可能会被键盘遮挡。对于 Capacitor 和 Cordova 应用,开发者通常依赖原生键盘插件来监听键盘生命周期事件。对于在移动浏览器中或作为 PWA 运行的应用,开发者可以使用受支持的 Visual Viewport API。Ionic Framework 封装了这两种方法,并在 window 上触发 ionKeyboardDidShow 和 ionKeyboardDidHide 事件。ionKeyboardDidShow 的事件负载包含键盘高度的像素近似值。
用法
- JavaScript
- Angular
- React
- Vue
window.addEventListener('ionKeyboardDidShow', ev => {
const { keyboardHeight } = ev;
// 根据键盘高度执行操作,例如将输入框移动到键盘上方。
});
window.addEventListener('ionKeyboardDidHide', () => {
// 将输入框移回原始位置
});
import { Platform } from '@ionic/angular';
...
constructor(private platform: Platform) {
this.platform.keyboardDidShow.subscribe(ev => {
const { keyboardHeight } = ev;
// 根据键盘高度执行操作,例如将输入框移动到键盘上方。
});
this.platform.keyboardDidHide.subscribe(() => {
// 将输入框移回原始位置
});
}
import { useKeyboardState } from '@ionic/react-hooks/keyboard';
...
const { isOpen, keyboardHeight } = useKeyboardState();
// 根据键盘高度执行操作,例如将输入框移动到键盘上方
import { useKeyboard } from '@ionic/vue';
import { watch } from 'vue';
...
const { isOpen, keyboardHeight } = useKeyboard();
watch(keyboardHeight, () => {
console.log(`键盘是否打开:${isOpen.value},键盘高度:${keyboardHeight.value}`);
});
对于在移动 Web 浏览器中或作为 PWA 运行的应用,键盘生命周期事件仅在 Chrome 62+ 和 iOS Safari 13.0+ 上支持。