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相比 ,实现的功能还不全





更多相关文章

  1. Android(安卓)控件布局常用属性
  2. android 从Assets中读取中文文本
  3. [Android基础知识][1] SpannableString属性详解
  4. android 获取屏幕宽高 & 控件宽高
  5. Android(安卓)自定义RatingBar评分控件
  6. Android带删除按钮的ListView
  7. Android滑动解锁控件
  8. android listView性能优化
  9. 沉浸式

随机推荐

  1. MySQL数据库备份过程的注意事项
  2. MySQL Select语句是如何执行的
  3. delete、truncate、drop的区别以及该如何
  4. MySQL两种删除用户语句的区别(delete use
  5. 浅析MySQL并行复制
  6. Mysql出生日期转换为年龄并分组统计人数
  7. MySQL存储过程的深入讲解(in、out、inout)
  8. IDEA使用mybatis-generator及配上mysql8.
  9. MySQL删除了记录不生效的原因排查
  10. MySQL中json字段的操作方法