您好,登錄后才能下訂單哦!
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問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。