我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android TextView两端对齐解决办法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android TextView两端对齐解决办法

Android TextView两端对齐解决办法

今天遇到一个关于TextView文字两端对齐其实方案,大家都知道原生控件是不能满足我们的需求的,因此需要自定义View

下面看下效果图

Android TextView两端对齐解决办法

package com.example.VerticalMarqueeTextView.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.text.TextPaint;import android.text.TextUtils;import android.util.AttributeSet;import android.view.ViewGroup;import android.view.ViewTreeObserver;import android.widget.TextView;public class WordAlignTextView extends TextView {  private float textSize;  private float textLineHeight;  //顶部  private int top;  //y轴  private int y;  //线  private int lines;  //底部  private int bottom;  //右边  private int right;  //左边  private int left;  //线字  private int lineDrawWords;  private char[] textCharArray;  private float singleWordWidth;   //每个字符的空隙  private float lineSpacingExtra;  private boolean isFirst = true;  public WordAlignTextView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);    getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {      @Override      public boolean onPreDraw() {        initTextInfo();        return true;      }    });  }  public WordAlignTextView(Context context, AttributeSet attrs) {    this(context, attrs, 0);  }  public WordAlignTextView(Context context) {    this(context, null, 0);  }  public void initTextInfo() {    textSize = getTextSize();    //获取线的高度    textLineHeight = getLineHeight();    left = 0;    right = getRight();    y = getTop();    // 要画的宽度    int drawTotalWidth = right - left;    String text = getText().toString();    if (!TextUtils.isEmpty(text) && isFirst) {      textCharArray = text.toCharArray();      TextPaint mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);      mTextPaint.density = getResources().getDisplayMetrics().density;      mTextPaint.setTextSize(textSize);      // 获取单个单词的的宽度      singleWordWidth = mTextPaint.measureText("一") + lineSpacingExtra;      // 每行可以放多少个字符      lineDrawWords = (int) (drawTotalWidth / singleWordWidth);      int length = textCharArray.length;      lines = length / lineDrawWords;      if ((length % lineDrawWords) > 0) {        lines = lines + 1;      }      first = false;      ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) getLayoutParams();      int totalHeight = (int) (lines*textLineHeight+textLineHeight*2 + getPaddingBottom()+getPaddingTop()+layoutParams.bottomMargin+layoutParams.topMargin);      setHeight(totalHeight);    }  }  @Override  protected void onDraw(Canvas canvas) {    bottom = getBottom();    int drawTotalLine = lines;    if(maxLine!=0&&drawTotalLine>maxLine){      drawTotalLine = maxLine;    }    for (int i = 0; i < drawTotalLine; i++) {      try {        int length = textCharArray.length;        int mLeft = left;        // 第i+1行开始的字符index        int startIndex = (i * 1) * lineDrawWords;        // 第i+1行结束的字符index        int endTextIndex = startIndex + lineDrawWords;        if (endTextIndex > length) {          endTextIndex = length;          y += textLineHeight;        } else {          y += textLineHeight;        }        for (; startIndex < endTextIndex; startIndex++) {          char c = textCharArray[startIndex];//     if (c == ' ') {//      c = '\u3000';//     } else if (c < '\177') {//      c = (char) (c + 65248);//     }          canvas.drawText(String.valueOf(c), mLeft, y, getPaint());          mLeft += singleWordWidth;        }      } catch (Exception e) {        e.printStackTrace();      }    }  }  int maxLine;  public void setMaxLines(int max){    this.maxLine = max;  }  public void setLineSpacingExtra(int lineSpacingExtra){    this.lineSpacingExtra = lineSpacingExtra;  }    public static boolean containChinese(String string){    boolean flag = false;    for (int i = 0; i < string.length(); i++) {      char c = string.charAt(i);      if ((c >= 0x4e00) && (c <= 0x9FA5)) {        flag = true;      }    }    return flag;  }  public static String ToDBC(String input) {    // 导致TextView异常换行的原因:安卓默认数字、字母不能为第一行以后每行的开头字符,因为数字、字母为半角字符    // 所以我们只需要将半角字符转换为全角字符即可    char c[] = input.toCharArray();    for (int i = 0; i < c.length; i++) {      if (c[i] == ' ') {        c[i] = '\u3000';      } else if (c[i] < '\177') {        c[i] = (char) (c[i] + 65248);      }    }    return new String(c);  }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android TextView两端对齐解决办法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android TextView两端对齐解决办法

Android TextView两端对齐解决办法今天遇到一个关于TextView文字两端对齐其实方案,大家都知道原生控件是不能满足我们的需求的,因此需要自定义View 下面看下效果图package com.example.VerticalM
2023-05-31

Android实现TextView两端对齐的方法

Android中的TextView控件默认是做不到两端对齐的,都是左对齐。可能的原因是安卓默认数字、字母不能为第一行以后每行的开头字符,因为数字、字母为半角字符,还有就是文字中的英文字符占用1个字节,而一个汉字占用两个字节。下面我就介绍下实
2022-06-06

Android TextView对齐的两种方法

Android TextView对齐的两种方法 在写Android布局文件时, 经常碰到如下图的TextView左右对齐的情况, 即姓名和手机号码纵向对齐。、 第一种方法: 在姓和名之间加空格, 但是如果用键盘的空格会在一些机型上对齐、
2023-05-30

Android 中的两端对齐实例详解

在android中的webview中,可以对文本内容进行对齐,具体方法如下 public class MainActivity extends Activity { @Override protected void onCreate(B
2022-06-06

Android开发解决字符对齐问题方法

这篇文章主要为大家介绍了Android开发解决字符对齐问题方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-01

vant中field组件label属性两端对齐问题怎么解决

这篇文章主要介绍“vant中field组件label属性两端对齐问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vant中field组件label属性两端对齐问题怎么解决”文章能帮助大家解
2023-06-30

Android 中TextView的使用imageview被压缩问题解决办法

Android 中TextView的使用imageview被压缩问题解决办法 看下运行效果图:今天解bug的时候遇到一个奇怪的问题:listview的item由一个textview和一个imageview组成,父布局是线性水平排列。我的本意
2022-06-06

MySQL中出现乱码和表格不对齐的解决办法

摘要:MySQL中出现乱码和表格不对齐的问题可通过以下方法解决:乱码:检查和设置数据库编码使用SETNAMES语句转换数据表格不对齐:使用MySQLWorkbench调整列宽使用HTML/CSS样式使用PAD()函数其他解决方案:确保连接设置正确使用Unicode更新MySQL版本预防措施:使用正确的编码验证输入数据定期维护数据库
MySQL中出现乱码和表格不对齐的解决办法
2024-04-02

解决Android模拟器端口被占用问题的办法

一、问题描述今天在Eclipse中运行Android项目时遇到"The connection to adb is down, and a severe error has occured"这个问题,如下图所示:第一次遇到这个问题,上网查了一
2022-06-06

Session对象失效的客户端解决方法284475处理办法

这篇文章主要介绍了Session对象失效的客户端解决方法,需要的朋友可以参考下
2023-05-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录