自己实现的一个不会奇奇怪怪换行的TextView.
来源:互联网 发布:ubuntu的中文输入法 编辑:程序博客网 时间:2024/05/01 20:50
import android.content.Context;import android.content.res.Resources;import android.graphics.Canvas;import android.text.Layout;import android.text.StaticLayout;import android.text.TextPaint;import android.util.AttributeSet;import android.util.TypedValue;import android.view.View;import android.view.ViewTreeObserver;import java.util.ArrayList;import java.util.List;/** * Created by songxun.sx on 2015/7/20. */public class TextDrawView extends View { private int textColor = 0xffafafaf; private float textSize = 12; private String textToDraw = ""; private List<String> textLines=new ArrayList<String>(); private float lineMul=1.3f; TextPaint textPaint; public TextDrawView(Context context) { super(context); init(); } public TextDrawView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public TextDrawView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public void init() { textPaint = new TextPaint(); textPaint.setAntiAlias(true); setTextColor(textColor); setTextSize(textSize); } public void setTextColor(int textColor) { this.textColor = textColor; textPaint.setColor(textColor); } /** * µ¥Î»sp */ public void setTextSize(float textSize) { Context context = this.getContext(); Resources r = Resources.getSystem(); if (context != null) { r = context.getResources(); } this.textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, textSize, r.getDisplayMetrics()); textPaint.setTextSize(this.textSize); } public void setText(String textToDraw) { if (textToDraw == null) { return; } this.textToDraw = textToDraw; invalidate(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); textLines.clear(); while (textToDraw.length() > 0) { int size = textPaint.breakText(textToDraw, true, getMeasuredWidth(), null); textLines.add(textToDraw.substring(0, size)); textToDraw = textToDraw.substring(size); } int width, height; int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); if (widthMode == MeasureSpec.EXACTLY) { width = widthSize; } else { width = getMeasuredWidth(); } if (heightMode == MeasureSpec.EXACTLY) { height = heightSize; } else { height = textLines.size()*(int)(textPaint.getTextSize()*lineMul)+1; } setMeasuredDimension(width, height); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } @Override protected void onDraw(Canvas canvas) { float x=0; float y=textPaint.getTextSize(); for(String text:textLines){ canvas.drawText(text,x,y,textPaint); y=y+textPaint.getTextSize()*lineMul; } }}
github地址:https://github.com/sddyljsx/Android-TextView-not-change-line-in-advance/blob/master/TextDrawView.java
0 0
- 自己实现的一个不会奇奇怪怪换行的TextView.
- 一个奇奇怪怪的js问题
- 一个奇奇怪怪的数学问题
- ios 画pdf时不会自动换行,自己写的一个自动换行的小方法
- android 的tablelayout 中textview不会自动换行的解决办法
- 自己实现一个可以折叠展开的TextView
- 一些奇奇怪怪的东西
- 奇奇怪怪的树形dp
- 那些奇奇怪怪的语句
- 【数论】奇奇怪怪的结论
- 奇奇怪怪的东西们
- textView换行的问题
- 有一个奇奇怪怪的发现,关于OJ测评时间
- 【TextView】自己实现的TextView,只有显示文字功能。
- VS奇奇怪怪的函数unsafe~
- TextView的自动换行问题
- 不会自动换行的文本编辑框(JTextPane)
- 不会自动换行的文本编辑框(JTextPane)
- 富文本(图文混排)—— TextKit & CoreText
- hdu1874-畅通工程续
- WORD BYTE 相互转换
- oracle ORA-12560: TNS: 协议适配器错误的问题
- URAL 1225Flags dp练习
- 自己实现的一个不会奇奇怪怪换行的TextView.
- Sqlite第三方类库:FMDB使用
- 【HDOJ 1005】 Number Sequence (裸矩阵快速幂)
- android自动化工具之--初体验之Monkey和MonkeyRunner
- Gaussian Mixture Model(学习Free Mind知识整理)
- PHP底层的运行机制与原理
- (EM算法)The EM Algorithm
- C语言基础知识之(八):二维数组,二维字符串数组,代码安全
- ubutun安装unoconv转换office文件为PDF