首页 > 代码库 > 解决android自带textview右侧文字不能对齐的问题
解决android自带textview右侧文字不能对齐的问题
1 package com.sixin.view; 2 3 import android.content.Context; 4 import android.graphics.Canvas; 5 import android.text.Layout; 6 import android.text.StaticLayout; 7 import android.text.TextPaint; 8 import android.util.AttributeSet; 9 import android.widget.TextView;10 11 /**12 * 能够自动修正的textview,解决android自带textview右侧文字不能对齐的问题13 */14 public class JustifyTextView extends TextView {15 16 private int mLineY;17 private int mViewWidth;18 19 public JustifyTextView(Context context, AttributeSet attrs) {20 super(context, attrs);21 }22 23 @Override24 protected void onLayout(boolean changed, int left, int top, int right, int bottom) {25 super.onLayout(changed, left, top, right, bottom);26 }27 28 @Override29 protected void onDraw(Canvas canvas) {30 TextPaint paint = getPaint();31 paint.setColor(getCurrentTextColor());32 paint.drawableState = getDrawableState();33 mViewWidth = getMeasuredWidth();34 String text = (String) getText();35 mLineY = 0;36 mLineY += getTextSize();37 Layout layout = getLayout();38 for (int i = 0; i < layout.getLineCount(); i++) {39 int lineStart = layout.getLineStart(i);40 int lineEnd = layout.getLineEnd(i);41 String line = text.substring(lineStart, lineEnd);42 43 float width = StaticLayout.getDesiredWidth(text, lineStart, lineEnd, getPaint());44 if (needScale(line)) {45 drawScaledText(canvas, lineStart, line, width);46 } else {47 canvas.drawText(line, 0, mLineY, paint);48 }49 50 mLineY += getLineHeight();51 }52 }53 54 private void drawScaledText(Canvas canvas, int lineStart, String line, float lineWidth) {55 float x = 0;56 if (isFirstLineOfParagraph(lineStart, line)) {57 String blanks = " ";58 canvas.drawText(blanks, x, mLineY, getPaint());59 float bw = StaticLayout.getDesiredWidth(blanks, getPaint());60 x += bw;61 62 line = line.substring(3);63 }64 65 float d = (mViewWidth - lineWidth) / line.length() - 1;66 for (int i = 0; i < line.length(); i++) {67 String c = String.valueOf(line.charAt(i));68 float cw = StaticLayout.getDesiredWidth(c, getPaint());69 canvas.drawText(c, x, mLineY, getPaint());70 x += cw + d;71 }72 }73 74 private boolean isFirstLineOfParagraph(int lineStart, String line) {75 return line.length() > 3 && line.charAt(0) == ‘ ‘ && line.charAt(1) == ‘ ‘;76 }77 78 private boolean needScale(String line) {79 if (line.length() == 0) {80 return false;81 } else {82 return line.charAt(line.length() - 1) != ‘\n‘;83 }84 }85 86 }
解决android自带textview右侧文字不能对齐的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。