Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 663|回复: 0

解决android自带textview右侧文字不能对齐的问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-9-3 10:18:27 | 显示全部楼层 |阅读模式
     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) != '\n';
    83         }
    84     }
    85 
    86 }

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-29 15:59 , Processed in 0.071118 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表