TextView 內容太多用省略號...,點選顯示全部
阿新 • • 發佈:2019-01-23
1.在xml檔案中控制TextView內容太多的時候用省略號表示
控制TextView內容太多的時候用省略號表示的屬性:ellipsize
這個屬性有5個值可選:
android:ellipsize = "end" 省略號在結尾
android:ellipsize = "start" 省略號在開頭
android:ellipsize = "middle" 省略號在中間
android:ellipsize = "marquee" 跑馬燈
android:ellipsize = "none" 不省略
在使用省略的時候,最好加一個TextView顯示行數的約束
android:singleline=”true”或者
android:lines=”2”
2.在java檔案中setEllipsize設定省略
TruncateAt是一個列舉類
tv.setEllipsize(TextUtils.TruncateAt.valueOf(“END”));
tv.setEllipsize(TextUtils.TruncateAt.valueOf(“START”));
tv.setEllipsize(TextUtils.TruncateAt.valueOf(“MIDDLE”));
tv.setEllipsize(TextUtils.TruncateAt.valueOf(“MARQUEE”));
最好加一個TextView顯示行數的約束,例如:
tv.setSingleLine(true);
tv.setLines(lines)
不僅對於textview有此屬性,對於editext也有,不過它不支援marquee。
package com.hp.classes.education.teacher.exam.util;
import android.content.Context;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.TextUtils.TruncateAt;
import android.util.AttributeSet;
import android.widget.TextView;
public class DiyTextView extends TextView {
static Typeface mTypeface; // 字型
private float maxWidth = 0.0f;
private boolean isSingleLine = true; // 是否是單行
private CharSequence myText = null;
public boolean getIsSingleLine() {
return isSingleLine;
}
@Override
public void setSingleLine(boolean singleLine) {
this.isSingleLine = singleLine;
super.setSingleLine(singleLine);
}
public DiyTextView(Context context) {
super(context, null);
setSingleLine();
this.setTypeface(getHpTTF(context));
}
public DiyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setSingleLine();
this.setTypeface(getHpTTF(context));
}
public DiyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setSingleLine();
this.setTypeface(getHpTTF(context));
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
float width = getTextOutWidth();
if (maxWidth != width && isSingleLine && myText != null) {
setText(myText);
}
}
/**
* @return 返回TextView可顯示文字內容的實際長度
*/
private float getTextOutWidth() {
float width = getMeasuredWidth();
if (width != 0) {
float paddingLeft = getPaddingLeft();
float paddingRight = getPaddingRight();
return (width - paddingLeft - paddingRight);
}
return 0;
}
@Override
public void setText(CharSequence text, BufferType type) {
TextPaint textPaint = this.getPaint(); //文字繪筆
maxWidth = getTextOutWidth();
if (maxWidth >= 0.1f && isSingleLine && text != null) {
// 有個內容過長加省略號的屬性 TruncateAt內容截斷的方式
TruncateAt truncateAt = getEllipsize();
if (truncateAt != TruncateAt.MARQUEE) {
CharSequence str = TextUtils.ellipsize(text, textPaint, maxWidth, truncateAt);
text = str;
}
}
myText = text;
super.setText(text, type);
}
/**
* @param context
* @return 從File或Assets中獲取字型
*/
public static Typeface getHpTTF(Context context) {
// String path = "/hpdata/fonts/hwapu-microhei+diy.ttf";
// File file = new File(path);
// if (file.exists()) {
// Typeface.createFromFile(file);
// }
//
if (mTypeface == null) {
try {
mTypeface = Typeface.createFromFile("/hpdata/fonts/hwapu-microhei+diy.ttf");
} catch (Exception e) {
e.printStackTrace();
}
}
if (mTypeface == null) {
try {
mTypeface = Typeface.createFromAsset(context.getApplicationContext().getAssets(),
"Hwapu-microhei+DIY.ttf");
} catch (Exception e) {
// TODO: handle exception
}
}
return mTypeface;
}
}