maxLines android:ellipsize="end" Spannable 互相之间存在冲突
16lz
2021-12-19
解决方式如下:
package com.yunspeak.travel.ui.view;import android.content.Context;import android.content.res.TypedArray;import android.text.DynamicLayout;import android.text.StaticLayout;import android.util.AttributeSet;import android.widget.TextView;import com.yunspeak.travel.R;import java.lang.reflect.Field;/** * Created by wangyang on 2016/12/1 0001. */public class EllipsizeTextView extends TextView { private int limitLines=1; public EllipsizeTextView(Context context) { this(context,null); } public EllipsizeTextView(Context context, AttributeSet attrs) { this(context, attrs,0); } public EllipsizeTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context,attrs,defStyleAttr); } private void init(Context context, AttributeSet attrs, int defStyleAttr) { TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.EllipsizeTextView, defStyleAttr, 0); int indexCount = typedArray.getIndexCount();//获取自定义属性个数 for (int i = 0; i < indexCount; i++) { int index = typedArray.getIndex(i); switch (index) { case R.styleable.EllipsizeTextView_m_limit_lines: limitLines = typedArray.getInt(index,1); break; } } typedArray.recycle(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { StaticLayout layout = null; Field field = null; try { Field staticField = DynamicLayout.class.getDeclaredField("sStaticLayout"); staticField.setAccessible(true); layout = (StaticLayout) staticField.get(DynamicLayout.class); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } if (layout != null) { try { field = StaticLayout.class.getDeclaredField("mMaximumVisibleLineCount"); field.setAccessible(true); field.setInt(layout, limitLines); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (layout != null && field != null) { try { field.setInt(layout, Integer.MAX_VALUE); } catch (IllegalAccessException e) { e.printStackTrace(); } } }}附上更多大神讨论链接:
http://stackoverflow.com/questions/14691511/textview-using-spannable-ellipsize-doesnt-work
更多相关文章
- android GPS定位和卫星个数
- 让android studio 支持Lambda
- Android读取Excel文件
- 无法找到“android:Theme.Holo.Light.DarkActionBar“的问题
- Android屏幕解锁图案破解
- 安装android SDK和导入项目容易遇到的ERROR
- 在Android(安卓)sdk 更新到5.0碰到的问题以及解决方案
- Android:giraffeplayer2 ConnectException:Failed to connect to
- Internal error. Please refer to https://code.google.com/p/an