【Unity TIL】在 android 下使用 TouchScreenKeyboard 进行输入(一)
一些情况下,可能会有这样的需求,只要调起键盘进行输入,不需要像 UGUI 中那样有一个显示的 Field,这时就直接使用 TouchScreenKeyboard 调动系统输入来处理。
如何使用
- TouchScreenKeyboard.Open 调起 keyboard
- 在 Update 中判断 keyboard 的状态,当不可见并处于 Done 状态时视为输入完成
遇到的问题
在 2018.4.19(我使用的版本)中,唤起 keyboard 后,在 keyboard 外点击,keyboard 收起,不能正确识别为取消输入,导致再次唤起 keyboard 失败,丢失焦点(切换应用到后台再切回来)会刷新。
如何解决
在 keyboard 收起后,同样会有一次焦点的切换,在 OnApplicationFocus 中进行判断,当获得焦点,keyboard 依然处于可视状态时,视为 cancel。
实例
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test
{
private string lastInput = String.Empty;
private TouchScreenKeyboard keyboard;
// 调起键盘
public void OnChatClick()
{
// Open 根据需要修改具体的参数
keyboard = TouchScreenKeyboard.Open(lastInput, TouchScreenKeyboardType.ASCIICapable, true, true);
}
// 处理输入
public void DealInput(string content)
{
}
// 检测输入完毕
private void Update()
{
if (TouchScreenKeyboard.visible == false && keyboard != null)
{
if (keyboard.status == TouchScreenKeyboard.Status.Done)
{
DealInput(keyboard.text);
lastInput = String.Empty;
keyboard = null;
}
}
}
// 因为在 android 上点击键盘外边,会收起但是不会被判定为 cancel
// 所以补一个键盘失去焦点的判断
// 2018.4.19 是这样,后边不清楚有没有改
private void OnApplicationFocus(bool hasFocus)
{
if (hasFocus)
{
if (keyboard != null && keyboard.status == TouchScreenKeyboard.Status.Visible)
{
keyboard.active = false;
lastInput = keyboard.text;
keyboard = null;
}
}
}
参考链接
- HoloLens开发手记 - Unity之Keyboard input 键盘输入 - msp的昌伟哥哥 - 博客园 (cnblogs.com)
- Unity - Scripting API: TouchScreenKeyboard
以下和本文内容无关
TIL,也就是 Today I Learned,实际上就是一个类似于笔记的东西。把一些基础的,比较细枝末节的内容记录整理以下,方便自己以后查找、复习,当然如果能帮到其他人就更好了。同时也算是对自己的一个激励,保持一个学习、记录、思考的状态。
很早之前看到刘未鹏的为什么你应该(从现在开始就)写博客,断断续续尝试过几次,但每次都是三分钟热度。这次决定按着 TIL 的思路还有雨松momo的unity系列博客(相信有很多人都有受到他博客的帮助)那样从最基本的内容开始,先培养一个习惯,希望这次能够坚持下去。