zoukankan      html  css  js  c++  java
  • 解决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     @Override
    24     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    25         super.onLayout(changed, left, top, right, bottom);
    26     }
    27 
    28     @Override
    29     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) != '
    ';
    83         }
    84     }
    85 
    86 }
  • 相关阅读:
    【卡西欧Fx-5800p系列教程】Pol()和Rec()正反算妙用
    《关于2013年全国测量人员最低工资标准的通知》
    易语言测量编程工具教程篇
    价值300元的《测量宝典》
    业界常用的和不常用cad快捷键
    角度格式批量转化弧度—易语言
    Web.config中 mode="RemoteOnly" 跟mode="On" 区别
    Oracle 批量修改某个用户下表的表空间
    JQuery radio单选框应用
    RadioButtonFor控件
  • 原文地址:https://www.cnblogs.com/dongweiq/p/4206332.html
Copyright © 2011-2022 走看看