android 在TextView内容进行省略与展示的动作

今天实现了一个这样内容的UI需求,并记录一下思路与问题

首先左侧文字分为 ”限2行并省略” 与 “不限行数且不省略” 两种状态

而右侧文字分为 “展开 ∨” 与 “收起 ∧” 两种

实现效果是:通过点击右侧文字改变本身的文字,同时也改变左侧的文字状态

右侧文字:

<TextView
   android:id="@+id/tv_btn_show"
   android:layout_width="0dp"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:gravity="center_horizontal|bottom"
   android:drawableEnd="@mipmap/icon_down_gray"
   android:text="展开"
   android:textSize="12sp"
   android:textColor="@color/gary_text"
   android:visibility="invisible"
   />

右侧文字 状态1(展开 + 图像 icon_down_gray)

Drawable dra = getResources().getDrawable(R.mipmap.icon_down_gray);
btn_showFull.setText("展开");
dra.setBounds(0, 0, dra.getMinimumWidth(),dra.getMinimumHeight());
//设置drawableEnd之前 drawable必须setBounds
btn_showFull.setCompoundDrawables(null,null,dra,null);

右侧文字 状态2(收起 + 图像 icon_up_gray)

Drawable dra = getResources().getDrawable(R.mipmap.icon_up_gray);
btn_showFull.setText("收起");
dra.setBounds(0, 0, dra.getMinimumWidth(), dra.getMinimumHeight());
//设置drawableEnd之前 drawable必须setBounds
btn_showFull.setCompoundDrawables(null,null,dra,null);

左侧文字:

<TextView
   android:id="@+id/txt3"
   android:layout_width="0dp"
   android:layout_height="wrap_content"
   android:layout_weight="5"
   android:text="--"
   android:textSize="12sp"
   android:textColor="@color/gary_text"
   android:maxLines="2"
   android:ellipsize="end"
   />

左侧文字 状态1(限制行数、省略)

txt3.setMaxLines(2);//限制两行
txt3.setEllipsize(TextUtils.TruncateAt.END);//在尾部省略

左侧文字 状态2 (不限制行数、不省略)

txt3.setMaxHeight(mContext.getResources().getDisplayMetrics().heightPixels);//不限制大小
txt3.setEllipsize(null);//不省略

能用代码实现状态的变化后,简单的加个点击事件完成动作就行了

值得一提的还有另外一个点,在左侧文字少于或等于两行且不需要省略的时候,是不需要展示右侧的文字的

这个时候我想要知道的是如何区分开 左侧文字此刻 需要省略与不需要省略(在状态1的时候)

我先尝试找了一下有没有一个值可以判断TextView Ellipsize有没有处于使用状态

结果直接找出了如何判断现在是否处于省略状态

https://blog.csdn.net/wdd1324/article/details/80257390

同时对于里面提到的setText后立刻检查状态无效的情况,也稍微了解了一下

https://blog.csdn.net/ltym2014/article/details/52148751

最终这个展示与不展示右侧文字的行为我是这么实现了

txt3.post(new Runnable() {
                            @Override
                            public void run() {
                                Layout layout = txt3.getLayout();
                                if (layout != null) {
                                    int countLine = txt3.getLineCount();//获取行数
                                    if (countLine > 0) {
                                        //获得最后一行被省略的内容数量,然后判断是不是大于0
                                        if (layout.getEllipsisCount(countLine - 1) > 0) 
                                        {
                                            //大于0则有省略内容
                                            Utils.LogI("省略了");
                                            btn_showFull.setVisibility(View.VISIBLE);
                                        } else {
                                            //等于0则没有省略内容
                                            Utils.LogI("没省略");
                                            btn_showFull.setVisibility(View.INVISIBLE);
                                        }
                                    }
                                }
                            }
                        });

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值