android text 中英文混排 换行的问题
16lz
2021-01-26
package com.example.mytextview;import java.util.ArrayList;import java.util.Arrays;import android.R.integer;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Paint.FontMetrics;import android.util.AttributeSet;import android.view.Gravity;import android.widget.TextView;public class MyTextView3 extends TextView {private Paint paint1 = new Paint();private float textSize;public MyTextView3(Context context, AttributeSet attrs) {super(context, attrs);textSize = super.getTextSize();paint1.setTextSize(textSize);int textColor = super.getTextColors().getColorForState(getDrawableState(), 0);paint1.setColor(textColor);paint1.setAntiAlias(true);}/** * 返回每行能显示字符串的集合 * @param content 所有字符 * @param p 用于测量每个字符的宽度 * @param width 文本框有效的宽度 去掉左右边距 * @return */private ArrayList autoSplit(String content, Paint p, float width) {ArrayList as = new ArrayList();//字符口中 的个数int length = content.length();float textWidth = p.measureText(content);if (textWidth < width) {as.add(content);return as;}int start = 0, end = 1;while (start < length) {// 一定个数的文本宽度小于控件宽度// 且 个数加1个(防止越界)文本宽度大于控件宽度时if (p.measureText(content, start, (end + 1) > length ? length: (end + 1)) >= width&& p.measureText(content, start, end) <= width) {as.add((String) content.subSequence(start, end));start = end;}// 不足一行的文本 最后一行处理if (end == length) {as.add((String) content.subSequence(start, end));break;}// 对换行符的识别if (content.charAt(end) == '\n') {as.add((String) content.subSequence(start, end));// end +1 去掉'\n'start = end + 1;}end += 1;}return as;}protected void onDraw(Canvas canvas) {String txt = super.getText().toString();FontMetrics fm = paint1.getFontMetrics();float baseline = fm.descent - fm.ascent;float x = getPaddingLeft();float y = baseline; // 由于系统基于字体的底部来绘制文本,所有需要加上字体的高度。// 一行的内容长度float lineLenth = getWidth() - getPaddingLeft() - getPaddingRight();ArrayList texts = autoSplit(txt, paint1, lineLenth);for (String string : texts) {System.out.println("string-->" + string);}for (int i=0;i
TextView mtv = (TextView) findViewById(R.id.view);mtv.setText(text);
MyTextView3继承textView 所以可直接用TextView ,直接替换就行
目前与自带TextView相比 ,实现的功能还不全
更多相关文章
- Android(安卓)控件布局常用属性
- android 从Assets中读取中文文本
- [Android基础知识][1] SpannableString属性详解
- android 获取屏幕宽高 & 控件宽高
- Android(安卓)自定义RatingBar评分控件
- Android带删除按钮的ListView
- Android滑动解锁控件
- android listView性能优化
- 沉浸式