下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么自定义带拼音音调Textview
Android中怎么自定义带拼音音调Textview,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.拼音textview,简单的为把拼音数组和汉字数组结合在一起多行显示import
android.annotation.SuppressLint;
import
android.content.Context;
import
android.graphics.Canvas;
import
android.graphics.Color;
import
android.graphics.Paint;
import
android.text.TextPaint;
import
android.util.AttributeSet;
import
android.widget.TextView;
import
com.cgtn.chineselearning.utils.ChineseCharacter2Spell;
import
mon.utils.ConvertUtils;
@SuppressLint("AppCompatCustomView")
public
class
SpellTextView
extends
TextView
{
private
String[]
pinyin;
private
String[]
chinese;
private
TextPaint
textPaintSpell
=
new
TextPaint(Paint.ANTI_ALIAS_FLAG);
private
TextPaint
textPaintChinese
=
new
TextPaint(Paint.ANTI_ALIAS_FLAG);
private
int
fontSizeSpell
=
ConvertUtils.dp2px(12);
private
int
fontSizeChinese
=
ConvertUtils.dp2px(12);
private
int
colorSpell
=
Color.parseColor("#1b97d6");
private
int
colorChinese
=
Color.parseColor("#000000");
public
SpellTextView(Context
context)
{
super(context);
}
public
SpellTextView(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
}
public
SpellTextView(Context
context,
AttributeSet
attrs,
int
defStyleAttr)
{
super(context,
attrs,
defStyleAttr);
initTextPaint();
}
public
void
initTextPaint()
{
float
denity
=
getResources().getDisplayMetrics().density;
textPaintSpell.setStrokeWidth(denity);
textPaintChinese.setStrokeWidth(denity);
textPaintSpell.setTextAlign(Paint.Align.LEFT);
textPaintChinese.setTextAlign(Paint.Align.LEFT);
//设置字体大小
textPaintSpell.setTextSize(fontSizeSpell);
textPaintChinese.setTextSize(fontSizeChinese);
textPaintSpell.setColor(colorSpell);
textPaintChinese.setColor(colorChinese);
}
@Override
protected
void
onDraw(Canvas
canvas)
{
float
widthMesure
=
0f;
int
comlum
=
1;
float
pinyinWidth;
if
(pinyin
!=
null
&&
pinyin.length
>
0)
{
for
(int
index
=
0;
index
<
pinyin.length;
index++)
{
pinyinWidth
=
widthMesure
+
textPaintSpell.measureText(pinyin[index]);
if
(pinyinWidth
>
getWidth())
{
comlum++;
widthMesure
=
0;
}
canvas.drawText(pinyin[index],
widthMesure,
(comlum
*
2
-
1)
*
(textPaintChinese.getFontSpacing()),
textPaintSpell);
canvas.drawText(chinese[index],
widthMesure
+
(textPaintSpell.measureText(pinyin[index])
-
textPaintChinese.measureText(chinese[index]))
/
2,
(comlum
*
2)
*
(textPaintChinese.getFontSpacing()),
textPaintChinese);
if
(index
+
1
<
pinyin.length)
{
widthMesure
=
widthMesure
+
textPaintSpell.measureText(pinyin[index]
+
1);
}
else
{
widthMesure
=
widthMesure
+
textPaintSpell.measureText(pinyin[index]);
}
}
}
}
//拼音和汉字的资源
public
void
setSpellAndChinese(String[]
pinYin,
String[]
chinese)
{
this.pinyin
=
pinYin;
this.chinese
=
chinese;
}
//设置文字资源
public
void
setStringResource(String
string)
{
initTextPaint();
String[]
spellArray
=
ChineseCharacter2Spell.getPinyinString(string);
StringBuilder
stringBuilder
=
new
StringBuilder();
for
(String
s
:
spellArray){
stringBuilder.append(s);
stringBuilder.append("
");
}
char[]
chars
=
string.toCharArray();
String[]
chineseArray
=
new
String[chars.length];
for
(int
i
=
0;
i
<
chars.length;i++){
chineseArray[i]
=
String.valueOf(chars[i]);
}
setSpellAndChinese(spellArray,chineseArray);
}
//设置文字颜色
public
void
setStringColor(int
spellColor,int
chineseColor)
{
textPaintSpell.setColor(spellColor);
textPaintChinese.setColor(chineseColor);
}
//设置文字大小
public
void
setFontSize(float
spellFontSize,float
chineseFontSize)
{
textPaintSpell.setTextSize(ConvertUtils.dp2px(spellFontSize));
textPaintChinese.setTextSize(ConvertUtils.dp2px(chineseFontSize));
}
}2.汉字转拼音使用implementation‘com.belerweb:pinyin4j:2.5.0'public
static
String[]
getPinyinString(String
character)
{
if
(character
!=
null
&&
character.length()
>
0)
{
String[]
pinyin
=
new
String[character.length()];
HanyuPinyinOutputFormat
format
=
new
HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
for
(int
index
=
0;
index
<
character.length();
index++)
{
char
c
=
character.charAt(index);
try
{
String[]
pinyinUnit
=
PinyinHelper.toHanyuPinyinStringArray(c,
format);
if
(pinyinUnit
==
null)
{
pinyin[index]
=
"
";
}
else
{
pinyin[index]
=
pin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国实验室浊度仪数据监测研究报告
- 2025至2030年低压塑料膜项目投资价值分析报告
- 2025年记忆式风量风速风温计项目可行性研究报告
- 2025年振动定量给料机项目可行性研究报告
- 2025至2030年湿膜柜式加湿器项目投资价值分析报告
- 2025至2030年木竹制品项目投资价值分析报告
- 五年级数学(小数乘法)计算题专项练习及答案
- 五年级数学(小数四则混合运算)计算题专项练习及答案汇编
- 船舶配件年物流服务协议
- 咖啡厅装修内部承包合同
- 2023年日语考试:大学日语六级真题模拟汇编(共479题)
- 皮带拆除安全技术措施
- ISO9001(2015版)质量体系标准讲解
- 《培训资料紧固》课件
- 黑龙江省政府采购评标专家考试题
- 成品烟道安装施工方案
- 医疗免责协议书范本
- 2023山东春季高考数学真题(含答案)
- 2022年初中历史课程标准电子版
- 高中生物 人教版 选修二《生态系统及其稳定性》 《生态系统及其稳定性》单元教学设计
- 工程勘察设计收费标准(2002年修订本)完整版
评论
0/150
提交评论