美文网首页Android自定义控件
Android非常简单的TextView展开和收起,在列表中Te

Android非常简单的TextView展开和收起,在列表中Te

作者: Topone | 来源:发表于2020-11-28 09:18 被阅读0次

我的效果图:

1.gif

第一步:布局,非常简单一个TextView和一个checkBox复选框

           <LinearLayout
            android:id="@+id/content_lin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingLeft="30dp"
            android:paddingRight="30dp"
            >

            <TextView
                android:id="@+id/zhuanfa_head"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:maxLines="5" 
                android:textColor="#4c5264"
                android:textSize="13sp" />

            <CheckBox
                android:id="@+id/check_zhankai"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:button="@null"   //去掉框图,只显示文字
                android:text="全文"
                android:textSize="13sp"
                android:visibility="gone" />
        </LinearLayout>

第二步:在Adapter适配器中写个逻辑。headTv(文字的TextView)/ch是展开和收起按钮
//展开文字

  final CheckBox ch = baseViewHolder.getView(R.id.check_zhankai);
    headTv.post(new Runnable() { //用post方法是因为当view绘制完获取信息,不然可能第一次获取不到正确的行数。
        @Override
        public void run() {
            dataBean.setMaxLines(headTv.getLineCount()); //保存一个最大行数,在集合对应的对象中
            if (headTv.getLineCount() > 5) {   //如果大于5行
                ch.setVisibility(View.VISIBLE);  //展开按钮显示
            } else {
                ch.setVisibility(View.GONE);   //否则,展开按钮隐藏
            }
        }
    });
    //当点击按钮发生改变
    ch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            dataBean.setCheckZK(isChecked); //这里在你的对象集合中记录一个状态值,防止滑动checkBox选中状态错乱
            if (isChecked) {
                ch.setText("收起");
                headTv.setMaxLines(dataBean.getMaxLines());
                headTv.postInvalidate();
            } else {
                headTv.setMaxLines(5);
                headTv.postInvalidate(); //刷新控件,不加的话,如果下拉刷新列表notifyDataSetChanged()的时候TextView会自动重绘
                ch.setText("全文");
            }
        }
    });
    ch.setChecked(dataBean.isCheckZK()); //随时释放选中状态

相关文章

网友评论

    本文标题:Android非常简单的TextView展开和收起,在列表中Te

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