Android TextView内容过长加省略号,获取行数,点击显示全部内容

在项目中需要运用到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);
                }

代码就这么多  希望能帮到各位   !!!!!!!

欢迎提问!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值