我的效果图:
![](https://img.haomeiwen.com/i25020431/1f5bac3e6e99a912.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()); //随时释放选中状态
网友评论