Android 仿微信朋友圈 Textview 全文 收起展示

先看效果图:

Android 仿微信朋友圈 Textview 全文 收起展示_第1张图片

Android 仿微信朋友圈 Textview 全文 收起展示_第2张图片



适用listview recycleview 滑动流畅,无BUG


上代码,直接写在adapter里


private final int MAX_LINE_COUNT = 3;//最大显示行数

private final int STATE_UNKNOW = -1;//未知状态

private final int STATE_NOT_OVERFLOW = 1;//文本行数小于最大可显示行数

private final int STATE_COLLAPSED = 2;//折叠状态

private final int STATE_EXPANDED = 3;//展开状态

private SparseArray mTextStateList;//保存文本状态集合

在绑定视图(我用的recycleview)onBindViewHolder中


int state = mTextStateList.get(position, STATE_UNKNOW);

if (state == STATE_UNKNOW) {
    myViewHolder.homeContent.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            //这个回掉会调用多次,获取玩行数后记得注销监听
            myViewHolder.homeContent.getViewTreeObserver().removeOnPreDrawListener(this);
            //如果内容显示的行数大于限定显示行数
            if (myViewHolder.homeContent.getLineCount() > MAX_LINE_COUNT) {
                myViewHolder.homeContent.setMaxLines(MAX_LINE_COUNT);//设置最大显示行数
                myViewHolder.homeShowOrHide.setVisibility(View.VISIBLE);//让其显示全文的文本框状态为显示
                myViewHolder.homeShowOrHide.setText("[全文]");//设置其文字为全文
                mTextStateList.put(position, STATE_COLLAPSED);
            } else {
                myViewHolder.homeShowOrHide.setVisibility(View.GONE);//显示全文隐藏
                mTextStateList.put(position, STATE_NOT_OVERFLOW);//让其不能超过限定的行数
            }
            return true;
        }
    });
} else {
    //            如果之前已经初始化过了,则使用保存的状态,无需在获取一次
    switch (state) {
        case STATE_NOT_OVERFLOW:
            myViewHolder.homeShowOrHide.setVisibility(View.GONE);
            break;
        case STATE_COLLAPSED:
            myViewHolder.homeContent.setMaxLines(MAX_LINE_COUNT);
            myViewHolder.homeShowOrHide.setVisibility(View.VISIBLE);
            myViewHolder.homeShowOrHide.setText("[全文]");
            break;
        case STATE_EXPANDED:
            myViewHolder.homeContent.setMaxLines(Integer.MAX_VALUE);
            myViewHolder.homeShowOrHide.setVisibility(View.VISIBLE);
            myViewHolder.homeShowOrHide.setText("[收起]");
            break;
    }
}


myViewHolder.homeShowOrHide.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int state = mTextStateList.get(position, STATE_UNKNOW);
        if (state == STATE_COLLAPSED) {
            myViewHolder.homeContent.setMaxLines(Integer.MAX_VALUE);
            myViewHolder.homeShowOrHide.setText("[收起]");
            mTextStateList.put(position, STATE_EXPANDED);
        } else if (state == STATE_EXPANDED) {
            myViewHolder.homeContent.setMaxLines(MAX_LINE_COUNT);
            myViewHolder.homeShowOrHide.setText("[全文]");
            mTextStateList.put(position, STATE_COLLAPSED);
        }
    }
});

myViewHolder.homeContent.setText(homeInformation.getSummary());//设置数据

 
  
myViewHolder.homeContent 换成自己的TextView文本控件名称就OK了
myViewHolder.homeShowOrHide是显示[全文]或[收起] 的Textview控件

别忘了mTextStateList = new SparseArray<>();//需要在adapter构造方法里new一下


 
  

 
  



 
  

你可能感兴趣的:(Android 仿微信朋友圈 Textview 全文 收起展示)