一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android重寫TextView實現文字整齊排版的方法(附demo源碼下載)

Android重寫TextView實現文字整齊排版的方法(附demo源碼下載)

2021-06-03 16:27xurong Android

這篇文章主要介紹了Android重寫TextView實現文字整齊排版的方法,結合實例形式分析了Android重寫TextView實現文字整齊排版的相關技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下

本文實例講述了Android重寫TextView實現文字整齊排版的方法。分享給大家供大家參考,具體如下:

XRTextView類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package rong.android.test;
import org.json.JSONArray;
import org.json.JSONException;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;
public class XRTextView extends TextView{
 private final String namespace = "rong.android.TextView";
 private String text;
 private float textSize;
 private float paddingLeft;
 private float paddingRight;
 private float marginLeft;
 private float marginRight;
 private int textColor;
 private JSONArray colorIndex;
 private Paint paint1 = new Paint();
 private Paint paintColor = new Paint();
 private float textShowWidth;
 private float Spacing = 0;
 private float LineSpacing = 1.3f;//行與行的間距
 public XRTextView(Context context, AttributeSet attrs) {
 super(context, attrs);
 text = attrs.getAttributeValue(
  "http://schemas.android.com/apk/res/android", "text");
 textSize = attrs.getAttributeIntValue(namespace, "textSize", 25);//字體大小
 textColor = attrs.getAttributeIntValue(namespace, "textColor",Color.BLUE);//字體顏色
 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);
 paintColor.setAntiAlias(true);
 paintColor.setTextSize(textSize);
 paintColor.setColor(Color.BLUE);
 }
 public XRTextView(Context context, float textSize, int textColor, float paddingLeft, float paddingRight, float marginLeft, float marginRight){
 super(context);
 this.textSize = textSize;
 this.textColor = textColor;
 this.paddingLeft = paddingLeft;
 this.paddingRight = paddingRight;
 this.marginLeft = marginLeft;
 this.marginRight = marginRight;
 paint1.setTextSize(textSize);
 paint1.setColor(textColor);
 paint1.setAntiAlias(true);
 paintColor.setAntiAlias(true);
 paintColor.setTextSize(textSize);
 paintColor.setColor(Color.BLUE);
 }
 public JSONArray getColorIndex() {
 return colorIndex;
 }
 public void setColorIndex(JSONArray colorIndex) {
 this.colorIndex = colorIndex;
 }
 /**
 * 傳入一個索引,判斷當前字是否被高亮
 * @param index
 * @return
 * @throws JSONException
 */
 public boolean isColor(int index) throws JSONException{
 if(colorIndex == null){
  return false;
 }
 for(int i = 0 ; i < colorIndex.length() ; i ++){
  JSONArray array = colorIndex.getJSONArray(i);
  int start = array.getInt(0);
  int end = array.getInt(1)-1;
  if(index >= start && index <= end){
  return true;
  }
 }
 return false;
 }
 @Override
 protected void onDraw(Canvas canvas) {
// super.onDraw(canvas);
 View view=(View)this.getParent();
 textShowWidth=view.getMeasuredWidth()-paddingLeft - paddingRight - marginLeft - marginRight;
 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;
  }
  boolean color = false;
  try {
  color = isColor(i);
  } catch (JSONException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
  }
  if(color){
  canvas.drawText(textCharArray, i, 1, paddingLeft + drawedWidth,
   (lineCount + 1) * textSize * LineSpacing, paintColor);
  }else{
  canvas.drawText(textCharArray, i, 1, paddingLeft + drawedWidth,
   (lineCount + 1) * textSize * LineSpacing, paint1);
  }
  if(textCharArray[i] > 127 && textCharArray[i] != '、' && textCharArray[i] != ',' && textCharArray[i] != '。' && textCharArray[i] != ':' && textCharArray[i] != '!'){
  drawedWidth += charWidth + Spacing;
  }else{
  drawedWidth += charWidth;
  }
 }
 setHeight((int) ((lineCount + 1) * (int) textSize * LineSpacing + 10));
 }
 public float getSpacing() {
 return Spacing;
 }
 public void setSpacing(float spacing) {
 Spacing = spacing;
 }
 public float getMYLineSpacing() {
 return LineSpacing;
 }
 public void setMYLineSpacing(float lineSpacing) {
 LineSpacing = lineSpacing;
 }
 public float getMYTextSize() {
 return textSize;
 }
 public void setMYTextSize(float textSize) {
 this.textSize = textSize;
 paint1.setTextSize(textSize);
 paintColor.setTextSize(textSize);
 }
}

MainActivity類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package rong.android.test;
import android.os.Bundle;
import android.widget.TextView;
import android.app.Activity;
public class MainActivity extends Activity {
 private XRTextView xrtextview = null;
 private TextView textview = null;
 private String content = "abcdefgABCDEF我要你lfwjkdfl;skjf asljkflskjfls;kjfsljfwfisdlfjsllkjsdfjlskjf546132s1f3sd4f31s3dffslfksjdfljlsadkjflsajdf sdfjklsajdflsa;jdfls 的!@#$%^&*()_";
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 xrtextview = (XRTextView) this.findViewById(R.id.mytextview_tv);
 xrtextview.setText(content);
 textview = (TextView) this.findViewById(R.id.mytextview_tv1);
 textview.setText(content);
 }
}

布局文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >
  <rong.android.test.XRTextView
    android:id="@+id/mytextview_tv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
  <TextView
    android:id="@+id/mytextview_tv1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@android:color/black" />
</LinearLayout>

完整實例代碼點擊此處本站下載

希望本文所述對大家Android程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女被扒开屁股进去网 | 欧美午夜精品久久久久久黑人 | 99热精品在线观看 | 亚洲视频男人的天堂 | 欧美激情 亚洲 | 欧美男男gaygaysxxx | 男人把j放进女人的p里视频 | 欧洲vodafonewi喷潮 | 91精品国产综合久久 | 二次元美女扒开内裤露尿口 | 日韩欧美综合在线二区三区 | 成人四虎| 暖暖的视频完整视频韩国免费 | xxxx泡妞中国 | 日韩欧美中文字幕一区二区三区 | 精品人人做人人爽久久久 | 无限在线观看免费入口 | 高中生放荡日记高h娜娜 | 特黄特级毛片免费视 | 久久国产乱子伦精品免费不卡 | 国产精品青青在线观看香蕉 | 特黄a级三级三级野战 | 久久精品国产亚洲AV天美18 | 亚洲香蕉伊在人在线观看9 亚洲系列国产系列 | 日韩久久网 | 成人影院在线观看免费 | 大吊操| 成人影院视频 | 久久噜国产精品拍拍拍拍 | 美女的隐私无遮挡的网页 | 国产免费资源高清小视频在线观看 | 日本一道高清不卡免费 | 朝鲜女人性猛交 | 狠狠燥| 猫咪av| 成年人在线免费看 | 美女脱了内裤打开腿让人羞羞软件 | 国内精品久久久久久野外 | 国产日韩欧美精品在线 | 欧美日韩一区二区三区在线视频 | 欧美精品久久一区二区三区 |