android自定义view解决textview显示排版的问题
2013-08-10 23:38
761 查看
public class MyTextView extends TextView { private int textSize = 25; private int textColor = R.color.black; private String text; private Paint paint; private boolean hasDrawed = false; private List<String> lines; public DiskNameTextView(Context context, AttributeSet attrs) { super(context, attrs); textSize = attrs.getAttributeIntValue( "http://schemas.android.com/apk/res/android", "textSize", 28); textColor = attrs.getAttributeIntValue( "http://schemas.android.com/apk/res/android", "textColor", R.color.black); paint = new Paint(); paint.setTextSize(textSize); paint.setColor(textColor); paint.setStyle(Style.FILL); paint.setAntiAlias(true); } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (text != null && !text.trim().equals("")) { if(lines != null) { //先把每行文字保存起来,重画的时候加快速度 for(int i=0; i<lines.size(); i++) { canvas.drawText(lines.get(i), 0, (i+1) * textSize, paint); } return; } int viewWidth = this.getWidth(); // 得到view的宽度 int textWidth = (int) paint.measureText(text, 0, text.length()); // 得到text的宽度 int line = (int) Math.ceil(textWidth / viewWidth) + 1; //得到行数 if(!hasDrawed) { //通过行数设置view的高度,最后加的1/2行高是为了把p、j这种跨行的字母显示完整 this.setLayoutParams(new LayoutParams(viewWidth, textSize * line + textSize / 2)); } if (textWidth < viewWidth) { canvas.drawText(text, 0, textSize, paint); } else { int currIndex = 0; int lineNum = 1; String lastLine = ""; lines = new ArrayList<String>(); int lineWords = (int) ((float)text.length() / ((float) textWidth / (float) viewWidth + 2)); for (int i = lineWords; i < text.length(); i++) { String subStr = text.substring(currIndex, i); int width = (int) paint.measureText(subStr, 0, subStr.length()); if (width < viewWidth) { lastLine = subStr; if (i == text.length() - 1) { lastLine = text.substring(currIndex, ++i); canvas.drawText(lastLine, 0, lineNum * textSize, paint); lines.add(lastLine); } continue; } else { canvas.drawText(lastLine, 0, lineNum * textSize, paint); lines.add(lastLine); currIndex = i - 1; lineNum++; i--; if(i + lineWords < text.length()) i += lineWords; } } hasDrawed = true; } } } public String getText() { return text; } public void setText(String text) { this.text = text; hasDrawed = false; invalidate(); } }
相关文章推荐
- 【完美解决系列】Android在自定义Dialog中TextView内容显示不全的问题
- Android 自定义View 解决 TextView 自动换行排版不整齐
- 解决TextView排版不齐问题----自定义TextVIew
- 自定义View控件解决android文字排版和换行的问题
- 解决Android原生TextView显示中英文等末尾参差不齐问题
- android 获取网络数据,回传到本地用TextView显示乱码问题解决方法
- android textView 排版显示参差不齐的解决方法
- JustifyTextView 解决TextView中英文混排排版问题,android文字排版不齐,
- Android:解决TextView排版混乱问题
- 自定义TextView解决超长文字显示的问题
- Android 解决TextView排版参差不齐的问题
- 通过自定义TextView,拉伸每行解决自动换行文字排版参差不齐问题
- Android 解决TextVIew加载自定义字体慢的问题
- 解决Android的TextView排版问题
- Android AutoWrapTextView 解决中英文排版问题
- 解决android的textview正确显示单词音标问题
- android textview显示GIF解决花屏问题,使用Glide4.0+,别犹豫,全网只有我这有写
- Android AutoWrapTextView中英文排版问题的解决方法
- 自定义View控件解决android文字排版和换行的问题
- android中textview显示汉字,字母,数字乱行行问题解决