博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity之TMP_InputField-输入字符数限制
阅读量:561 次
发布时间:2019-03-09

本文共 1834 字,大约阅读时间需要 6 分钟。

文章目录


前言

我们在开发过程中遇到需要使用输入框的情况,输入框要做字符数限制,很便捷的InputField检视面板会有公开的字符数限制调节。但是你会发现,无论是英文字符还是中文字符,它都是一视同仁的,这就很难受了,因为从展示上,中英文的位宽是不一样的,我们需要英文字符数显示的多一些,中文字符数少一些。下面就来解决这个问题。

在这里插入图片描述

思路

我们知道英文字符在UTF-8的模式下只占1个字符,中文占2-5个字符,还有其它各类字符,我们这里主要考虑中英文, 通常来讲,我们可以限制一下输入内容的总字符数,比如限制为12个,将输入的内容进行UTF-8的转换,“aaa哈哈哈” ,总字符数为12个,哈 占3个。不过这样还有点问题,12个字符,中文只能输入4个。

abcdabcdabcd     12个字符你好呀哈          12个字符你好呀哈你好

很明显这样展示出来也不合理,所以我们需要把中文:英文的字数按1:2进行限制。

代码

using TMPro;using UnityEngine;using UnityEngine.UI;/// /// 中文字符数转变为2/// [RequireComponent(typeof(TMP_InputField))]public class CharNumTransf : MonoBehaviour{
private TMP_InputField inputField; [Header("最大字数")] //英文算1个,中文算2个 public int MaxLimit = 16; private void Awake() {
InputField if (inputField == null) {
inputField = GetComponent
(); } } void Start() {
inputField.onValidateInput = _OnValidateInput; } char _OnValidateInput(string text, int charIndex, char addedChar) {
if (GetTransCharNum(text) + GetTransCharNum(addedChar.ToString()) > MaxLimit) {
return '\0'; //返回空 } return addedChar; } ///
/// 字符串统计 /// ///
///
int GetTransCharNum(string text) {
int totalNum = 0; char[] alrText = text.ToCharArray(); foreach (var item in alrText) {
totalNum += SingleCharTrans(item); } return totalNum; } ///
/// 单个字符判断 /// ///
///
int SingleCharTrans(char singChar) {
int leng = System.Text.Encoding.UTF8.GetBytes(singChar.ToString()).Length; if (leng >= 2) {
leng = 2; } return leng; }}

工程项目

链接:https://pan.baidu.com/s/1Rar1pSsgwK_aCh2SuHqVrQ

提取码:t8wq

转载地址:http://sovpz.baihongyu.com/

你可能感兴趣的文章