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

先看效果图:



适用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<Integer> 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一下


 

 



 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值