前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android自定义带拼音音调Textview

Android自定义带拼音音调Textview

作者头像
砸漏
发布2020-10-27 14:36:11
7000
发布2020-10-27 14:36:11
举报
文章被收录于专栏:恩蓝脚本

本文实例为大家分享了Android自定义带拼音音调Textview的具体代码,供大家参考,具体内容如下

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

代码语言:javascript
复制
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 com.cgtn.common.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′

代码语言:javascript
复制
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] = pinyinUnit[0];
}
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
}
return pinyin;
} else {
return null;
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档