TextView 设置显示省略号
生活随笔
收集整理的這篇文章主要介紹了
TextView 设置显示省略号
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
限制TextView顯示的字符數,多出的部分顯示省略號。
效果圖如下:
自定義EllipsizingTextView.java,(com.example.user.helloworld.EllipsizingTextView)內容如下:
public class EllipsizingTextView extends TextView {private static final String ELLIPSIS = "...";private boolean isStale;private boolean programmaticChange;private String fullText;private int maxLength = -1;public EllipsizingTextView(Context context) {super(context);}public EllipsizingTextView(Context context, AttributeSet attrs) {super(context, attrs);}public EllipsizingTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}/*** 外部通過調用setMaxLength方法設置顯示的最多字數為maxLength* @param maxLength*/public void setMaxLength(int maxLength) {this.maxLength = maxLength;}public int getMaxLength(){return maxLength;}@Overrideprotected void onTextChanged(CharSequence text, int start, int before, int after) {super.onTextChanged(text, start, before, after);if (!programmaticChange) {fullText = text.toString();isStale = true;}}@Overrideprotected void onDraw(Canvas canvas) {if (isStale) {super.setEllipsize(null);resetText();}super.onDraw(canvas);}private void resetText() {int len = fullText.length();String workingText = fullText;if (maxLength != -1) {if (len > maxLength) {workingText = fullText.substring(0, maxLength).trim();workingText = workingText + ELLIPSIS;}}if (!workingText.equals(getText())) {programmaticChange = true;try {setText(workingText);} finally {programmaticChange = false;}}isStale = false;}}
1. Activity布局文件actiivty_main.xml中使用此自定義TextView,如下:
<com.example.user.helloworld.EllipsizingTextViewandroid:id="@+id/tv_content"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Android是一種基于Linux的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用“安卓”或“安致”。Android操作系統最初由Andy Rubin開發,主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬件制造商、軟件開發商及電信營運商組建開放手機聯盟共同研發改良Android系統。隨后Google以Apache開源許可證的授權方式,發布了Android的源代碼。第一部Android智能手機發布于2008年10月。"android:maxLines="10"/>
如果單行文本顯示不完整末尾顯示省略號,就簡單多了。 只需要在activity的布局文件,TextView節點添加屬性:android:singleLine="true"和android:ellipsize="end"即可,如下: <TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"<strong>android:singleLine="true"</strong>android:text="Android是一種基于Linux的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。"<strong>android:ellipsize="end"</strong>/> 如果限制顯示指定的行數,超出指定的行數顯示省略號。已經有人自定義了EllipsizingTextView類。 原文地址:http://code.taobao.org/p/android_jiudu/src/trunk/Forlind/src/com/wine/jiubang/ui/view/EllipsizingTextView.java 點擊打開鏈接代碼如下: package com.example.user.helloworld;import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.text.Layout; import android.text.StaticLayout; import android.text.TextUtils; import android.util.AttributeSet; import android.widget.TextView;import java.util.ArrayList; import java.util.List;public class EllipsizingTextView extends TextView {private static final String ELLIPSIS = "...";public interface EllipsizeListener {void ellipsizeStateChanged(boolean ellipsized);}private final List<EllipsizeListener> ellipsizeListeners = new ArrayList<EllipsizeListener>();private boolean isEllipsized;private boolean isStale;private boolean programmaticChange;private String fullText;private int mMaxLines = -1;private float lineSpacingMultiplier = 1.0f;private float lineAdditionalVerticalPadding = 0.0f;public EllipsizingTextView(Context context) {super(context);}public EllipsizingTextView(Context context, AttributeSet attrs) {super(context, attrs);// 開始沒加這兩行的時候,一直不對,maxlinex在textChange里面會被改變為-1TypedArray a = context.obtainStyledAttributes(attrs, new int[] { android.R.attr.maxLines });setMaxLines(a.getInt(0, 2));a.recycle();}public EllipsizingTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// 開始沒加這兩行的時候,一直不對,maxlinex在textChange里面會被改變為-1TypedArray a = context.obtainStyledAttributes(attrs, new int[] { android.R.attr.maxLines });setMaxLines(a.getInt(0, 2));a.recycle();}public void addEllipsizeListener(EllipsizeListener listener) {if (listener == null) {throw new NullPointerException();}ellipsizeListeners.add(listener);}public void removeEllipsizeListener(EllipsizeListener listener) {ellipsizeListeners.remove(listener);}public boolean isEllipsized() {return isEllipsized;}@Overridepublic void setMaxLines(int maxLines) {super.setMaxLines(maxLines);this.mMaxLines = maxLines;isStale = true;}public int getMaxLine() {return mMaxLines;}public int getTextLines(){return createWorkingLayout(fullText).getLineCount();}@Overridepublic void setLineSpacing(float add, float mult) {this.lineAdditionalVerticalPadding = add;this.lineSpacingMultiplier = mult;super.setLineSpacing(add, mult);}@Overrideprotected void onTextChanged(CharSequence text, int start, int before, int after) {super.onTextChanged(text, start, before, after);if (!programmaticChange) {fullText = text.toString();isStale = true;}}@Overrideprotected void onDraw(Canvas canvas) {if (isStale) {super.setEllipsize(null);resetText();}super.onDraw(canvas);}private void resetText() {int maxLines = getMaxLine();String workingText = fullText;boolean ellipsized = false;if (maxLines != -1) {Layout layout = createWorkingLayout(workingText);if (layout.getLineCount() > maxLines) {workingText = fullText.substring(0, layout.getLineEnd(maxLines - 1)).trim();Layout layout2 = createWorkingLayout(workingText + ELLIPSIS);while (layout2.getLineCount() > maxLines) {workingText = workingText.substring(0, workingText.length() - 1 - 1);layout2 = createWorkingLayout(workingText + ELLIPSIS);}workingText = workingText + ELLIPSIS;ellipsized = true;}}if (!workingText.equals(getText())) {programmaticChange = true;try {setText(workingText);} finally {programmaticChange = false;}}isStale = false;if (ellipsized != isEllipsized) {isEllipsized = ellipsized;for (EllipsizeListener listener : ellipsizeListeners) {listener.ellipsizeStateChanged(ellipsized);}}}private Layout createWorkingLayout(String workingText) {return new StaticLayout(workingText, getPaint(), getWidth() - getPaddingLeft()- getPaddingRight(), Layout.Alignment.ALIGN_NORMAL, lineSpacingMultiplier,lineAdditionalVerticalPadding, false);}@Overridepublic void setEllipsize(TextUtils.TruncateAt where) {// Ellipsize settings are not respected } }}}
使用方法:
1 Activity類的布局文件activity_main.xml使用此自定義View,如下:
<com.example.user.helloworld.EllipsizingTextViewandroid:id="@+id/etv"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Android是一種基于Linux的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用“安卓”或“安致”。Android操作系統最初由Andy Rubin開發,主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬件制造商、軟件開發商及電信營運商組建開放手機聯盟共同研發改良Android系統。隨后Google以Apache開源許可證的授權方式,發布了Android的源代碼。第一部Android智能手機發布于2008年10月。"/>2 Activity類查找該組件 private EllipsizingTextView tv_content = (EllipsizingTextView)findViewById(R.id.etv); tv_content.setMaxLines(5);最終實現的效果是:少于5行內容全部顯示,超出5行內容不顯示,且第5行末尾顯示省略號。
總結
以上是生活随笔為你收集整理的TextView 设置显示省略号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 瀑布流分析
- 下一篇: linux tc 限速,linux tc