温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android中如何自定义带拼音音调Textview

发布时间:2022-04-18 13:56:44 来源:亿速云 阅读:268 作者:iii 栏目:开发技术

本篇内容介绍了“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 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'

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;   } }

“Android中如何自定义带拼音音调Textview”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI