UGUI 多音字项目中用到多音字 奈何拼音字体库并非支持多音字,随便写了小工具类
来源:互联网 发布:去北京linux培训 编辑:程序博客网 时间:2024/04/27 06:11
废话不多说 说一下解决思路
第一:字体库包含多音字 但是因为文档只支持一种字体。所以就是将要变换的多音字转化为空格(不显示),将多音字放置到空格位置上(修改字体)
第二:一句中可能有多种字体 如 的 de di 长 chang zhang de 是第二种字体 chang 是第三种字体才有,所以多音字要可以多次定义字体,即相同字体的要可以公用一个字体
第三:这样会出现很多子Text 更改文档内容的时候要清空所有text
第一个方法 将文档中这个字替换掉 这里不能用空格 要用\u3000 代替 否者空格会被换行符代替
/// <summary>
/// 替换除了这个字的所有别的文字为空格
/// </summary>
/// <param name="text"></param>
/// <param name="charPoint"></param>
/// <returns></returns>
private string ChangeExceptThisCharAddEmptyText(string text, char charPoint)
{
string[] strings = text.Split(charPoint);
string ft_text = null;
for (int i = 0; i < strings.Length; i++)
{
if (i != 0)
{
ft_text += charPoint;
}
for (int a = 0; a < strings[i].Length; a++)
{
ft_text = ft_text + "\u3000";
}
}
return ft_text;
}
第二个方法 替换这个字为空格
/// <summary>
/// 替换这个字为空格
/// </summary>
/// <param name="text"></param>
/// <param name="charPoint"></param>
/// <returns></returns>
private string ChangeThisCharAddEmptyText(string text, char charPoint)
{
string[] strings = text.Split(charPoint);
string ft_text = null;
for (int i = 0; i < strings.Length; i++)
{
//Debug.Log(strings[i]);
ft_text = ft_text + strings[i] + "\u3000";
}
return ft_text;
}
第三个方法 将所有多音字注入文档
/// <summary>
/// 迭代修改 将多音字 字节组全部修改一遍
/// </summary>
/// <param name="text"></param>
/// <param name="fontIndex"></param>
/// <param name="charList"></param>
/// <param name="textContent"></param>
private void ChangeTextPinYinCharListEmptyApi(Text text, int fontIndex, char[] charList, string textContent)
{
string ft_text = textContent;
for (int i = 0; i < charList.Length; i++)
{
ft_text = ChangeThisCharAddEmptyText(ft_text, charList[i]);
}
text.text = ft_text;
}
第四个方法 清空
/// <summary>
/// 清理索引值为1以后的子物体
/// </summary>
/// <param name="text"></param>
public void ClearPinYinText(Text text) {
for (int i =0; i < text.gameObject.transform.childCount; i++)
{
Destroy(text.transform.GetChild(i).gameObject);
}
text.text = null;
}
第五个方法 修改多音字总方法
private void ChangeTextPinYinExceptThisCharEmptyApi(Text text, int fontIndex, char charPoint, string textContent)
{
//获取清空的字符串
string ft_text = ChangeExceptThisCharAddEmptyText(textContent, charPoint);
//创建新的text
Text newText = Instantiate(text, text.transform.localPosition, text.transform.localRotation) as Text;
for (int i = 0; i < newText.transform.childCount; i++)
{
Destroy(newText.transform.GetChild(i).gameObject);
}
//重置childtext参数
newText.transform.SetParent(text.transform);
newText.transform.localPosition = Vector3.zero;
newText.transform.localScale = Vector3.one;
newText.font = fontList[fontIndex];
newText.text = ft_text;
}
最后就可以设置自己要更换的字体及文字了
测试例子
public void SetTextTextContentApi(Text text, string textContent,bool isClearAll)
{
if (isClearAll) { ClearAllPinYinText(text);} else {ClearPinYinText(text); };
ChangeTextPinYinCharListEmptyApi(text, 0, new char[4] { '长', '的', '呢','了' }, textContent);
ChangeTextPinYinExceptThisCharEmptyApi(text, 1, '长', textContent);
ChangeTextPinYinExceptThisCharEmptyApi(text, 2, '的', textContent);
ChangeTextPinYinExceptThisCharEmptyApi(text, 1, '呢', textContent);
ChangeTextPinYinExceptThisCharEmptyApi(text, 1, '了', textContent);
}
- UGUI 多音字项目中用到多音字 奈何拼音字体库并非支持多音字,随便写了小工具类
- 汉字转化为拼音,支持多音字
- c#版汉字拼音大全,支持多音字
- php提取字符串拼音首字母(支持多音字)
- 汉字字词转拼音接口(支持多音字)
- [C#] 汉字转拼音,支持多音字
- 取汉字首字母的类, 支持多音字
- PHP多音字拼音处理方案
- 【ASP】GBK汉字转拼音程序,支持多音字
- pinyin4j 汉字转换为拼音 (支持多音字)
- Pinyin4J.jar 对汉字转为拼音,支持多音字。
- Pinyin4J.jar 对汉字转为拼音,支持多音字
- Java 汉字转拼音(完美支持解决多音字)
- 由“多音字”所想到的
- asp 汉字转拼音-多音字的处理
- iOS 中文转拼音 多音字处理
- android 汉字转拼音带多音字识别
- java pinyin实例,拼音写法支持多音字自动识别(本测试实例使用了pinyin4j,pinyin1.0,jetbrick-pinyin)
- git 的基本命令使用(会持续扩展)
- codeforces768G The Winds of Winter -- 树上启发式合并
- 使用maven profile实现多环境可移植构建
- iOS iPad和iPhone开发区别~笔记 03
- lintcode 报数(Count and Say) (Java)
- UGUI 多音字项目中用到多音字 奈何拼音字体库并非支持多音字,随便写了小工具类
- 数字格式化JS
- webpack构建React应用一:创建项目
- Electron使用NodeJS扩展模块调用DLL
- Eclipse中.setting目录下文件介绍
- 请假时间计算(基本的)
- iscroll 5.1.2版本的API详解
- Hibernate SQLQuery执行实体查询带来的多个无关联查询语句
- iOS开发之ReactiveCocoa框架(RAC)第三篇实例颜色选择器