在很多app上能看到文字展示收缩效果,点击展示全部,再点击收缩,显示指定行数的效果,如图:
默认状态:
保持显示不动,展开全部:
实现基本的TextView点击显示所有内容;一开始实现效果很low,基本是局部隐藏显示,这样很不好,后来看到了TextView的setEllipsize属性,一个TextView实现展示收缩功能,保持现实的不变,无卡顿.下面分享下实现代码:
一 xml布局文件
<TextView
android:id="@+id/tv_details" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#FF2043AC"
android:maxLines="2"
android:text="这是一个TextView展开效果演示demo,点击展开按钮实现文字全部显示,点击收缩按钮实现文字省略显示"/>
<ImageView
android:id="@+id/iv_details"
android:layout_below="@+id/tv_details"
android:layout_width="30dp"
android:layout_height="30dp" android:layout_centerHorizontal="true"
android:src="@mipmap/details_open" />
android:maxLines=”2”这儿可以根据自己需要设置默认显示的行数;
二 activity中的代码:
public class MainActivity extends AppCompatActivity {
private Boolean flag = true;
private TextView tv_details;
private ImageView iv_details;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_details = (ImageView) findViewById(R.id.iv_details);
tv_details = (TextView) findViewById(R.id.tv_details);
iv_details.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (flag) {
flag = false;
tv_details.setEllipsize(null); // 展开
tv_details.setSingleLine(flag);
iv_details.setImageResource(R.mipmap.details_close);
} else {
flag = true;
tv_details.setEllipsize(TextUtils.TruncateAt.END); // 收缩
tv_details.setMaxLines(2);
iv_details.setImageResource(R.mipmap.details_open);
}
}
});
}
}
设置一个Boolean类型的标志,当点击展开时调用:
tv_details.setEllipsize(null);
tv_details.setSingleLine(flag);
则全部显示,设置setEllipsize为null,设置setSingleLine为FALSE;
当收缩时:
tv_details.setEllipsize(TextUtils.TruncateAt.END);
tv_details.setMaxLines(2);
则收缩显示,设置setEllipsize为TextUtils.TruncateAt.END,设置setSingleLine为默认显示的行数; 这样就可以实现TextView展开显示全部的功能了;