在项目中需要运用到TextView的一些属性,在这里也整合记录一下。
在Android TextView中有个内容过长加省略号的属性,即ellipsize,用法如下:
在xml中:
Android:ellipsize="end" 省略号在结尾
android:ellipsize="start" 省略号在开头
android:ellipsize="middle" 省略号在中间
android:ellipsize="marquee" 跑马灯
最好加一个TextView显示行数的约束,例如:android:singleline="true"或者android:lines="2"
在Java文件中:
tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));
最好加一个TextView显示行数的约束,例如:tv.setSingleLine(true);
不仅对于textview有此属性,对于editext也有,不过它不支持marquee。
在Android TextView中获取行数,用法如下:
android:maxLines="2"//设置显示行数 ndroid:lineSpacingMultiplier="1.3"//设置行间距倍数
android:lineSpacingExtra="10dp"//设置行间距
1、TextView获取行数的方法是textview.getLineCount();
2、在TextView设置setText后直接用方法获取行数会发现行数总是为0,这时TextView还未完成measure,我们必须在绘制view后才可以获得正确的行数。
再网上也看了很多我用的是 textView.getViewTreeObserver().addOnPreDrawListene()
还有一种就是 View.post(Runnable r)
第一种 :
//isstate用于控制监听走的次数,因为获取行数后在设置textView会再次进入监听会出现问题
private boolean isstate=true;
textview.getViewTreeObserver()
.addOnPreDrawListener(newViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
if (isstate) {
isstate=false;
//这边我是判断textview的行数超过两行的时候第二行末尾显示省略号
if (textview.getLineCount() > 2) {
//貌似在xml中设置获取不到真实的行数
textview.setEllipsize(TextUtils.TruncateAt.END);
img_arrows.setVisibility(View.VISIBLE);
} else {
img_arrows.setVisibility(View.INVISIBLE);
}
}
//这里必须为true false的话就死循环了
return true;
}
});
第二种:
test.post(new Runnable() {
@Override
public void run() {
//获取textView的行数
int txtPart = test.getLineCount();
if (txtPart > 3) {
//大于三行做的操作
test.setMaxLines(3);
//显示查看更多
} else {
//隐藏查看更多
}
}
});
Android TextView折叠效果:
//标记arrowsFlag
if (arrowsFlag){
arrowsFlag =false;
tv_hunpai.setEllipsize(null); // 展开
tv_hunpai.setSingleLine(arrowsFlag);
//这个是小箭头
img_arrows.setBackgroundResource(R.drawable.arrows_up);
}else {
arrowsFlag =true;
tv_hunpai.setEllipsize(null); // 收缩
//设置显示两行
tv_hunpai.setMaxLines(2);
//收缩的时候也要把显示省略号的写出来
tv_hunpai.setEllipsize(TextUtils.TruncateAt.END);
//这个是小箭头
img_arrows.setBackgroundResource(R.drawable.arrows_down);
}
代码就这么多 希望能帮到各位 !!!!!!!
欢迎提问!!!!!!!!