android 自定义textView,实现排版对齐和换行
来源:互联网 发布:fft蝶形算法 编辑:程序博客网 时间:2024/05/11 10:10
android开发中的textview可以自动换行,但是对于显示纯英文文字来说很好用,如果夹杂了中文字符后,全角字符和半角字符混在一块儿,就会出现文字排版参差不齐,超级难看,这就需要重写textview来实现我们需要的显示方式。
下面贴上我的代码:
main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ae="http://www.angellecho.com/" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/black" android:gravity="center_horizontal" android:orientation="vertical" ><ScrollView android:layout_width="wrap_content" android:layout_height="200dp" > <com.wigit.MyTextView2 android:id="@+id/view" android:layout_width="fill_parent" android:layout_height="200dp" android:layout_marginTop="20dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:background="@android:color/darker_gray" ae:marginLeft="20" ae:marginRight="20" ae:paddingLeft="20" ae:paddingRight="20" ae:textColor="#FFFFFF" ae:textSize="30" /></ScrollView></LinearLayout>
重写后的textview如下,可能与网上其他例子有些相似,但是还解决了drawText不能换行的问题:package com.wigit;import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.widget.TextView;public class MyTextView2 extends TextView{private final String namespace = "http://www.angellecho.com/";private String text;private float textSize;private float paddingLeft;private float paddingRight;private float marginLeft;private float marginRight;private int textColor;private Paint paint1 = new Paint();private float textShowWidth;public MyTextView2(Context context, AttributeSet attrs) {super(context, attrs);text = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "text");textSize = attrs.getAttributeIntValue(namespace, "textSize", 15);textColor = attrs.getAttributeIntValue(namespace, "textColor",Color.WHITE);paddingLeft = attrs.getAttributeIntValue(namespace, "paddingLeft", 0);paddingRight = attrs.getAttributeIntValue(namespace, "paddingRight", 0);marginLeft = attrs.getAttributeIntValue(namespace, "marginLeft", 0);marginRight = attrs.getAttributeIntValue(namespace, "marginRight", 0);paint1.setTextSize(textSize);paint1.setColor(textColor);paint1.setAntiAlias(true);textShowWidth = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth() - paddingLeft - paddingRight - marginLeft - marginRight;}@Overrideprotected void onDraw(Canvas canvas) {//super.onDraw(canvas);int lineCount = 0;text = this.getText().toString();//.replaceAll("\n", "\r\n");if(text==null)return;char[] textCharArray = text.toCharArray();// 已绘的宽度float drawedWidth = 0;float charWidth;for (int i = 0; i < textCharArray.length; i++) {charWidth = paint1.measureText(textCharArray, i, 1);if(textCharArray[i]=='\n'){lineCount++;drawedWidth = 0;continue;}if (textShowWidth - drawedWidth < charWidth) {lineCount++;drawedWidth = 0;}canvas.drawText(textCharArray, i, 1, paddingLeft + drawedWidth,(lineCount + 1) * textSize, paint1);drawedWidth += charWidth;}setHeight((lineCount + 1) * (int) textSize + 5);}}
测试activity
package com.text;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import com.wigit.MyTextView2;import android.app.Activity;import android.content.Context;import android.content.res.AssetManager;import android.os.Bundle;import android.text.method.ScrollingMovementMethod;public class MTextViewActivity extends Activity {MyTextView2 view; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main1); view = (MyTextView2) findViewById(R.id.view); view.setText(getAssetsString(this,"1.txt")); view.setMovementMethod(ScrollingMovementMethod.getInstance()); }
//读取assets文件夹下文本字符串public String getAssetsString(Context context,String fileName){StringBuffer sb = new StringBuffer();try {AssetManager am = context.getAssets();InputStream in = am.open(fileName);BufferedReader reader = new BufferedReader(new InputStreamReader(in));String line;while((line = reader.readLine())!=null){line += ("\n");sb.append(line);}reader.close();in.close();} catch (IOException e) {e.printStackTrace();}return sb.toString();}}
并附上例子如下(免积分哦):
http://download.csdn.net/detail/dyc333236081818/4231656
- android 自定义textView,实现排版对齐和换行
- android 自定义textView,实现排版对齐和换行
- android 自定义textView,实现排版对齐和换行
- TextView 换行对齐自定义
- Android 自定义TextView 实现文字对齐排版且支持点击划词
- 实现TextView 文字排版,分散两端对齐
- textview 文字排版问题,实现两端对齐
- Android自定义TextView排版优化
- Android TextView 解决文字换行排版
- android textview 自动换行 整齐排版
- android textview 自动换行 整齐排版
- android textview 自动换行 整齐排版
- 【TextView】自定义TextView中文换行排版问题修复
- Android textview文字对齐换行问题
- 关于自定义TextView排版分散对齐的思路
- Android 自定义TextView 自动换行
- Android TextView自动换行文字,排版混乱的原因和解决方法
- Android TextView自动换行文字,排版混乱的原因和解决方法
- CSS Filters
- C# 处理字符串 项目 心得
- 2012.4.16笔记--形式参数和实际参数
- 一只袜子折射出来的处事习惯和心态
- VoiceXML简介
- android 自定义textView,实现排版对齐和换行
- Android 解决ListView 和 ScrollView 共存冲突的问题
- JavaScript本地存储实践(html5的localStorage和ie的userData)
- Avoiding Full GCs in HBase with MemStore-Local Allocation Buffers: Part 1
- 《java中输入一个数字的实现》
- SVG xlink
- 视频学习网站
- Getter / Setter 的滥用
- windows扫雷注入(1s完成扫雷)