浅谈Android textview文字对齐换行的问题

今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下。

经过研究之后,终于找到了textview自动换行导致混乱的原因了----半角字符与全角字符混乱所致!一般情况下,我们输入的数字、字母以及英文标点都是半角,所以占位无法确定。

它们与汉字的占位大大的不同,由于这个原因,导致很多文字的排版都是参差不齐的。

对此我找到了两种办法可以解决这个问题:

1. 将textview中的字符全角化。

即将所有的数字、字母及标点全部转为全角字符,使它们与汉字同占两个字节,这样就可以避免由于占位导致的排版混乱问题了。 半角转为全角的代码如下,只需调用即可。

/**
  * 半角转换为全角
  *
  * @param input
  * @return
  */
 public static String ToDBC(String input) {
  char[] c = input.toCharArray();
  for (int i = 0; i < c.length; i++) {
   if (c[i] == 12288) {// 全角空格为12288,半角空格为32
    c[i] = (char) 32;
    continue;
   }
   if (c[i] > 65280 && c[i] < 65375)// 其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
    c[i] = (char) (c[i] - 65248);
  }
  return new String(c);
 } 

2. 去除特殊字符或将所有中文标号替换为英文标号。

利用正则表达式将所有特殊字符过滤,或利用replaceAll()将中文标号替换为英文标号。则转化之后,则可解决排版混乱问题。

/**
  * 去除特殊字符或将所有中文标号替换为英文标号
  *
  * @param str
  * @return
  */
 public static String stringFilter(String str) {
  str = str.replaceAll("【", "[").replaceAll("】", "]")
    .replaceAll("!", "!").replaceAll(":", ":");// 替换中文标号
  String regEx = "[『』]"; // 清除掉特殊字符
  Pattern p = Pattern.compile(regEx);
  Matcher m = p.matcher(str);
  return m.replaceAll("").trim();
 } 

解决之前层次不齐的排版截图:

解决之后的整齐排版,如下图:

以上这篇浅谈Android textview文字对齐换行的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Android自定义TextView实现文字倾斜效果
  • Android 解决TextView排版参差不齐的问题
  • Android TextView两端对齐解决办法
  • Android TextView对齐的两种方法
(0)

相关推荐

  • Android TextView两端对齐解决办法

    Android TextView两端对齐解决办法 今天遇到一个关于TextView文字两端对齐其实方案,大家都知道原生控件是不能满足我们的需求的,因此需要自定义View 下面看下效果图 package com.example.VerticalMarqueeTextView.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import andro

  • Android TextView对齐的两种方法

    Android TextView对齐的两种方法 在写Android布局文件时, 经常碰到如下图的TextView左右对齐的情况, 即姓名和手机号码纵向对齐.. 第一种方法:  在姓和名之间加空格, 但是如果用键盘的空格会在一些机型上对齐.一些机型上不对齐. \u3000是全角空格:  \u0020是半角空格,效果跟在英文输入法下直接敲键盘空格一样. 这里要用全角空格,  占位一个汉字. <TextView android:layout_width="wrap_content" a

  • Android自定义TextView实现文字倾斜效果

    前言 由于Android自带的TextView控件没有提供倾斜的(我暂时没有找到),我们可以自定义控件来实现,下面首先来看我们实现的效果图. TextView文字倾斜 其实实现很简单,下面我们来看实现步骤: 1.新建一个类 LeanTextView继承TextView public class LeanTextView extends TextView { public int getmDegrees() { return mDegrees; } public void setmDegrees(

  • Android 解决TextView排版参差不齐的问题

     Android 解决TextView排版参差不齐的问题 在app中,展示数据时,里面有汉字.数字.特殊字符时,由于全角.半角问题导致TextView参差不齐.在网上找了许多,半角转全角并没什么用,还有其他自定义TextView都有问题.最后终于找到一个,就像Word一样,可以使文字左右两端对齐: package com.monkey.monkeymushroom.view; import android.content.Context; import android.graphics.Canv

  • 浅谈Android textview文字对齐换行的问题

    今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下. 经过研究之后,终于找到了textview自动换行导致混乱的原因了----半角字符与全角字符混乱所致!一般情况下,我们输入的数字.字母以及英文标点都是半角,所以占位无法确定. 它们与汉字的占位大大的不同,由于这个原因,导致很多文字的排版都是参差不齐的. 对此我找到了两种办法可以解决这个问题: 1. 将textview中的字符全角化. 即将所有的数字.字母及标点全部转为全角字符,使它们与汉字同占两个字节,这样就

  • 浅谈Android添加快捷方式ShortCut

    众所周知application有4种启动方式: 点击app启动 快捷方式 通知跳转 输入命令(adb命令等) 今天给大家简单介绍一下快捷方式启动的用法~ 快捷方式介绍 谷歌官方在Android 7.1(API 25)新增了桌面长按弹出菜单,并且在8.0(API 26)以后可以固定快捷方式至桌面上.围绕桌面快捷方式的需求也比较多,例如微信将联系人.小程序都可以添加至桌面:简书将"写文章"添加至桌面:高德将"坐标信息"添加到桌面. 快捷方式情景再现 将某个应用添加到桌面

  • 浅谈Android Studio导出javadoc文档操作及问题的解决

    1.在Android studio中进行打开一个项目的文件之后,然后进行点击Android stuio中菜单中的"tools"的选项.在弹出了下拉菜单中,进行选中下拉菜单中的"Generate JavaDoc"的选项. 2.在弹出界面中 Output directory是你即将生产的javadoc文件的存储位置,图中1指示的位置:正常点击ok即可: 但是如果有异常情况 比如空指针异常或者文档乱码 java.lang.NullPointerException 或者 j

  • 浅谈Android截屏和指定View生成截图

    当前页面截图(截取整个屏幕) 截取当前Activity页面的截图,可以通过窗体最底层的decorView进行缓存,然后根据这个缓存对象生成一张图片.有的需要不需要状态栏,也可以指定生成图片的宽高,把状态栏去除. /** * 截取当前窗体的截图,根据[isShowStatusBar]判断是否包含当前窗体的状态栏 * 原理是获取当前窗体decorView的缓存生成图片 */ fun captureWindow(activity: Activity, isShowStatusBar: Boolean)

  • 浅谈android中数据库的拷贝

    SQLiteDatabase不支持直接从assets读取文件,所以要提前拷贝数据库.在读取数据库时,先在项目中建立assets文件夹用于存放外部文件,将数据库文件拷到该目录下. 代码方法: /** * 拷贝数据库至file文件夹下 * @param dbName 数据库名称 */ private void initAddressDB(String dbName) { //1,在files文件夹下创建同名dbName数据库文件过程 File files=getFilesDir();//获取/dat

  • 浅谈Android Activity与Service的交互方式

    实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通过广播的方式发送出来,Client端注册此广播的监听器,当获取到该广播后,将广播中当前的下载进度解析出来并更新到界面上. 优缺点分析: 通过广播的方式实现Activity与Service的交互操作简单且容易实现,可以胜任简单级的应用.但缺点也十分明显,发送广播受到系统制约.系统会优先发送系统级广播,在某些特定的情况下,我们自定义的广播可能会延迟.同时在广播接收器中不能处理长耗时操作,否则系统会出现ANR即应用程序无响应

  • 浅谈android获取设备唯一标识完美解决方案

    本文介绍了浅谈android获取设备唯一标识完美解决方案,分享给大家,具体如下: /** * deviceID的组成为:渠道标志+识别符来源标志+hash后的终端识别符 * * 渠道标志为: * 1,andriod(a) * * 识别符来源标志: * 1, wifi mac地址(wifi): * 2, IMEI(imei): * 3, 序列号(sn): * 4, id:随机码.若前面的都取不到时,则随机生成一个随机码,需要缓存. * * @param context * @return */ p

  • 浅谈mysql数据库中的换行符与textarea中的换行符

    1. mysql数据库中的换行符 在mysql数据库中, 其换行符为\n 即 char(10), 在python中为chr(10) 2. textarea中的换行符 textarea中的换行符为\r\n 3. web应用中换行符转换 以下是python django web的处理: # data为textarea获取的数据, 其中包括换行符`\r\n`, 以下是过渡处理 data = data.replace('\r\n', '\n') # 或 data = data.replace('\r\n

  • 浅谈Android Studio 3.0 工具新特性的使用 Android Profiler 、Device File Explorer

    前言: 其实 studio3.0的工具大家也已经使用过一段时间了,自己呢,就是从bate版开始使用的,我觉得比较好用的几个地方.就几个,可能还没用到其他的精髓. 但我觉的这个两个功能对我是比较实用的.好那么下面就给大家介绍一下吧. 正文: 话不多说咱们直接上图吧.(个人比较喜欢看图说话) 第一个(Android Profiler)我要介绍的就是这个了.(先看一下效果"震撼一下") (图-1) (图-2) (图-3) (厉害不厉害,牛逼不牛逼)那么我们怎么来操作这个工具呢,来咱们接着看图

随机推荐