代码不多,看起来不复杂。https://github.com/Carbs0126/ExpandableTextView
getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { ViewTreeObserver obs = getViewTreeObserver(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { obs.removeOnGlobalLayoutListener(this); } else { obs.removeGlobalOnLayoutListener(this); } Log.d(TAG, "onGlobalLayout: "); setTextInternal(getNewTextByConfig(), mBufferType); } });1. 初始化的时候,监听布局完成。 但是只监听一次。所以要 obs.removeOnGlobalLayoutListener( this ) ;
2. 点击展开收起的效果,用的是富文本 ClickableSpan。
3. 展开收起的文字放在右下角,替换的原文字的个数,是不确定的,因为每个字符的宽度不一样。用measureText计算文字宽度。默认的个数是展开的字符串个数,然后在逼近
展开的字符宽度。