说来也是蛮有意思的,这种效果我在17年就遇到过实现过,时隔五年再次遇到,有点懵逼,到处找组件,有些效果系统原生控件便能实现
布局代码编写
<TextView
android:id="@+id/tv_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_14"
android:ellipsize="end"
android:maxLines="2"
。。。。。。
android:textColor="#ff6f6f6f"
android:textSize="12sp" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aimg_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:src="@mipmap/ic_down_arrow" />
折叠控制
aImgMore.setOnClickListener {
if (moreFlag) {
//展开
moreFlag = false
tvDesc.ellipsize = null
tvDesc.isSingleLine = moreFlag
aImgMore.setImageResource(R.mipmap.ic_up_arrow)
} else {
//收起
moreFlag = true
tvDesc.setLines(2)
tvDesc.ellipsize = TextUtils.TruncateAt.END
aImgMore.setImageResource(R.mipmap.ic_down_arrow)
}
}
用到的属性介绍
TextView中内容过长时添加省略号的属性,即ellipsize
用法如下:
在XML文件中设置:
android:ellipsize = "end" //省略号在结尾
android:ellipsize = "start" //省略号在开头
android:ellipsize = "middle" //省略号在中间
android:ellipsize = "marquee" // 跑马灯
android:singleline = "true" //添加一个约束
在代码中可以这样写,如下:
textView.setEllipsize(TextUtils.TruncateAt.valueOf("END"));
textView.setEllipsize(TextUtils.TruncateAt.valueOf("START"));
textView.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));
textView.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));
textView.setSingleLine(true); //添加约束或者指定最大行数来加约束
此属性还可以对EditText控件使用,但是不支持marquee(跑马灯效果)。