1. 程式人生 > >TextView 內容太多用省略號...,點選顯示全部

TextView 內容太多用省略號...,點選顯示全部

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; } }