美文网首页
TextView监听ellipsize是否生效

TextView监听ellipsize是否生效

作者: 萧清轩 | 来源:发表于2018-09-11 18:50 被阅读0次

开发过程中,为使TextView直观的表现文字没有展示完整,会启用TextView的ellipsize属性

android:ellipsize="end"

有时候,我们需要判断它到底有没有生效,这就会用到Layout中的getEllipsisCount方法了;
api中指出,该方法获取的就是被省略的部分的文字数量;

layout.getEllipsisCount(int line)

但是要注意的是,该方法只有在TextView绘制完成后,才能获取正确的值,监听View绘制,这个太容易了,下面给出一个封装好的TextView

EllipsisTextView


/**
 * Created by MrYan on 2018/9/11.
 * 监听是否触发 ellipsize 属性的TextView
 */

@SuppressLint("AppCompatCustomView")
public class EllipsisTextView extends TextView {
    private static final String TAG = "EllipsizeTextView";

    private OnEllipsisListener onEllipsisListener;

    public EllipsisTextView(Context context) {
        super(context);
        init();
    }

    private void init() {
        //设置观察者,烂大街的代码
        //这里未把观察者注销,是因为我的TextView宽高是随时变化的,如果是固定的最好根据需要注销掉
        getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                analyzeProcess();
            }
        });
    }

    /**
     * 通过 layout 的 getEllipsisCount(int line) 方法,来获取被省略的部分数量
     * 为0时就是没省略
     * 在利用自定义的监听器返回给待操作的对象;
     */
    private void analyzeProcess() {
        if (onEllipsisListener == null) return;
        Layout layout = getLayout();//拿到Layout
        int line = getLineCount();//获取文字行数
        if (line > 0) {
            int ellipsisCount = layout.getEllipsisCount(line - 1);
            //ellipsisCount > 0 时,说明省略生效
            onEllipsisListener.onEllipsis(ellipsisCount > 0, ellipsisCount);
        }
    }

    public void setOnEllipsisListener(OnEllipsisListener onEllipsisListener) {
        this.onEllipsisListener = onEllipsisListener;
    }

    public EllipsisTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public EllipsisTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }


    /**
     * 自定义监听器
     * boolean 省略是否生效  ellipsisCount 省略部分字数
     */
    public interface OnEllipsisListener {
        void onEllipsis(boolean isEllipsis, int ellipsisCount);
    }

}

相关文章

网友评论

      本文标题:TextView监听ellipsize是否生效

      本文链接:https://www.haomeiwen.com/subject/wetpgftx.html