解决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();
	}

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

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

时间: 2024-11-01 11:35:26

解决android textview自动换行问题的相关文章

Android TextView自动换行文字排版参差不齐的原因

  http://niufc.iteye.com/blog/1729792  

android-如果解决Android在SDK15的手机上为TextView设置阴影效果无效

问题描述 如果解决Android在SDK15的手机上为TextView设置阴影效果无效 我在android5.0上可以看到阴影效果,在4.0.4却看不到. android:id="@+id/magic_school_details_name_TextView" android:layout_width="wrap_content" android:layout_height="20dp" android:layout_alignParentBot

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:textScaleX是调节字间距的,它的值是一个float型.查看源代码,默认textView 此属性是使用的是: android.internal.R.styleable.TextView_textScaleX setTextScaleX(a.getFloat(attr, 1.0f)); 行间距 Android系统中TextView默认显示中文时会比较紧凑,不是很美观.为了让每行保持一定的行间距,可以设置属性android:lineSpacin

service-如何解决 android 中的异常问题?

问题描述 如何解决 android 中的异常问题? 在Android程序中,我创建了HttpDelete方法来调用REST web服务. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView txt = (TextView) findViewById(R.id.textView1); txt.setT

求指导android TextView里怎么同时放大文字和多个图片

问题描述 求指导android TextView里怎么同时放大文字和多个图片 求指导TextView里怎么同时放大文字和多个图片,图片和文字通过html导入的,,,,求解决 解决方案 TextView.setText(Html.fromHtml(""xxxxxxxxx""))不知道是否符合你的需求 解决方案二: ScaleAnimation伸缩动画

Android TextView实现词组高亮的示例代码

本文介绍了Android TextView实现词组高亮的示例代码,分享给大家,具体如下: HighlightTextView Android文本高亮控件,基于View实现. 特点 文本高亮 单词自动换行 高亮词组保持在同一行显示 效果如下: 主要逻辑: 两个 Paint 负责绘制不同的文字 在每次绘制之前计算将要绘制的文本是否会超出屏幕宽度,如果超出则换行 protected void onDraw(Canvas canvas) { super.onDraw(canvas); float x_d

解决Android 沉浸式状态栏和华为虚拟按键冲突问题

对于现在的 App 来说,布局页面基本都会用到沉浸式状态栏,单纯的沉浸式状态栏很容易解决,但是在华为手机上存在一个底部虚拟按键的问题,会导致页面底部和顶部出现很大的问题,比如页面底部导航栏被按键覆盖,导致底部无法操作,顶部状态栏布局被撑的很高,丑的不忍直视,这里就将两者的冲突问题一并解决!先看下实现的效果图: 这是我自己的手机,OnePlus 3T 7.1.1版本(免费广告,没给我钱的啊),不是华为的手机,但是有个虚拟按键可以设置,可以看到底部导航栏没有问题,顶部状态栏也成功实现,效果图看完,下

代码-如何解决Android中的一个小问题?

问题描述 如何解决Android中的一个小问题? 我在写android代码时候如下一段代码: public void cc(){ String aa=getHtml();//有点耗时 ......... } 在执行过程之中,程序还未等aa返回值时,就执行下面代码.如何让aa执行完后再执行下面代码. 解决方案 你可以这样的 public void cc(){ String aa=getHtml(); if(aa!=null){ //这里放下面执行的代码,这样就能等你上面执行完再执行下面的了,你看行