【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 @ 2022-05-10 02:01  fcnaud  阅读(813)  评论(0编辑  收藏  举报