Android中怎么自定义带拼音音调Textview

Android中怎么自定义带拼音音调Textview,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1.拼音textview,简单的为把拼音数组和汉字数组结合在一起多行显示

Android中怎么自定义带拼音音调Textview

importandroid.annotation.SuppressLint;
importandroid.content.Context;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.text.TextPaint;
importandroid.util.AttributeSet;
importandroid.widget.TextView;
importcom.cgtn.chineselearning.utils.ChineseCharacter2Spell;
importcom.cgtn.common.utils.ConvertUtils;

@SuppressLint("AppCompatCustomView")
publicclassSpellTextViewextendsTextView{
privateString[]pinyin;
privateString[]chinese;

privateTextPainttextPaintSpell=newTextPaint(Paint.ANTI_ALIAS_FLAG);
privateTextPainttextPaintChinese=newTextPaint(Paint.ANTI_ALIAS_FLAG);

privateintfontSizeSpell=ConvertUtils.dp2px(12);
privateintfontSizeChinese=ConvertUtils.dp2px(12);

privateintcolorSpell=Color.parseColor("#1b97d6");
privateintcolorChinese=Color.parseColor("#000000");
publicSpellTextView(Contextcontext){
super(context);
}

publicSpellTextView(Contextcontext,AttributeSetattrs){
super(context,attrs);
}

publicSpellTextView(Contextcontext,AttributeSetattrs,intdefStyleAttr){
super(context,attrs,defStyleAttr);
initTextPaint();
}

publicvoidinitTextPaint(){
floatdenity=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
protectedvoidonDraw(Canvascanvas){
floatwidthMesure=0f;
intcomlum=1;
floatpinyinWidth;
if(pinyin!=null&&pinyin.length>0){
for(intindex=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]);
}
}
}
}

//拼音和汉字的资源
publicvoidsetSpellAndChinese(String[]pinYin,String[]chinese){
this.pinyin=pinYin;
this.chinese=chinese;
}

//设置文字资源
publicvoidsetStringResource(Stringstring){
initTextPaint();
String[]spellArray=ChineseCharacter2Spell.getPinyinString(string);
StringBuilderstringBuilder=newStringBuilder();
for(Strings:spellArray){
stringBuilder.append(s);
stringBuilder.append("");
}

char[]chars=string.toCharArray();
String[]chineseArray=newString[chars.length];
for(inti=0;i<chars.length;i++){
chineseArray[i]=String.valueOf(chars[i]);
}
setSpellAndChinese(spellArray,chineseArray);
}

//设置文字颜色
publicvoidsetStringColor(intspellColor,intchineseColor){
textPaintSpell.setColor(spellColor);
textPaintChinese.setColor(chineseColor);
}

//设置文字大小
publicvoidsetFontSize(floatspellFontSize,floatchineseFontSize){
textPaintSpell.setTextSize(ConvertUtils.dp2px(spellFontSize));
textPaintChinese.setTextSize(ConvertUtils.dp2px(chineseFontSize));
}
}

2.汉字转拼音使用 implementation ‘com.belerweb:pinyin4j:2.5.0'

publicstaticString[]getPinyinString(Stringcharacter){
if(character!=null&&character.length()>0){
String[]pinyin=newString[character.length()];
HanyuPinyinOutputFormatformat=newHanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
for(intindex=0;index<character.length();index++){
charc=character.charAt(index);
try{
String[]pinyinUnit=PinyinHelper.toHanyuPinyinStringArray(c,format);
if(pinyinUnit==null){
pinyin[index]="";
}else{
pinyin[index]=pinyinUnit[0];
}
}catch(BadHanyuPinyinOutputFormatCombinationbadHanyuPinyinOutputFormatCombination){
badHanyuPinyinOutputFormatCombination.printStackTrace();
}

}
returnpinyin;
}else{
returnnull;
}
}

关于Android中怎么自定义带拼音音调Textview问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。

发布于 2021-06-13 23:19:02
收藏
分享
海报
0 条评论
169
上一篇:android中怎么解决中文字体向上偏移 下一篇:怎么使用Python3.8
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码