【Unity TIL】在 android 下使用 TouchScreenKeyboard 进行输入(一)

一些情况下,可能会有这样的需求,只要调起键盘进行输入,不需要像 UGUI 中那样有一个显示的 Field,这时就直接使用 TouchScreenKeyboard 调动系统输入来处理。

如何使用

  1. TouchScreenKeyboard.Open 调起 keyboard
  2. 在 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;
}
}
}

参考链接


以下和本文内容无关

TIL,也就是 Today I Learned,实际上就是一个类似于笔记的东西。把一些基础的,比较细枝末节的内容记录整理以下,方便自己以后查找、复习,当然如果能帮到其他人就更好了。同时也算是对自己的一个激励,保持一个学习、记录、思考的状态。

很早之前看到刘未鹏的为什么你应该(从现在开始就)写博客,断断续续尝试过几次,但每次都是三分钟热度。这次决定按着 TIL 的思路还有雨松momo的unity系列博客(相信有很多人都有受到他博客的帮助)那样从最基本的内容开始,先培养一个习惯,希望这次能够坚持下去。

posted @   fcnaud  阅读(863)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
点击右上角即可分享
微信分享提示