冲天香阵透长安,满城尽带黄金甲。这篇文章主要讲述安卓TextView限定行数最大值,点击按钮显示所有内容相关的知识,希望能为你提供帮助。
问题展示
文章图片
如上图所示,在普通的TextView中,要求:
- 最多显示3行
- 超过三行显示展开按钮
- 且点击展开按钮显示完整内容
解决思路:
- 写好布局文件,隐藏展开按钮
- 填充数据,判断数据是否塞满前三行
- 根据上一步的判断结果,选择隐藏和显示展开按钮
布局文件此处省略,很简单只有一个TextView和一个Button,并设置Button隐藏。
首先,为了控制最大行数,设置TextView的属性MaxLines = 3。
接下来是两个比较关键的步骤:
1 为了判断数据是否填满了前三行,采用下面的函数进行判断,其中tv_content为展示内容的TextView
private boolean judgeFull(){ return tv_content.getPaint().measureText(tv_content.getText().toString()) > 3*(tv_content.getWidth() - tv_content.getPaddingRight() - tv_content.getPaddingLeft()); }
思路很简单,即计算三行所能提供的最大尺寸和所有文字所需要的尺寸,对二者进行比较即可
2 根据上一步得到的返回值,如果返回为true ,则说明已经塞满了数据,此时让Button显示,对Button添加点击事件,点击以后让设置MaxLines=100,这里就不上代码了,很简单。
此时我以为已经可以了,没想到又遇到了一个问题,即,TextView渲染是需要时间的,如果在获取到TextView并setText()之后立马进行判断,会发现此时TextView还没有绘制出来,拿到的属性均为初始值,比如前面函数中调用的getWidth返回为0,这样显然是不对的。怎么解决呢?
不卖关子了,方法就是采用TextView的一个方法,即post()方法,该方法的参数为Runnable,在Runnable里面进行判断就能保证此时TextView已经是绘制好的了。代码如下:
tv_content.post(new Runnable() { @Override public void run() { if(judgeFull()){ ll_more.setVisibility(View.VISIBLE); }else { ll_more.setVisibility(View.GONE); } } });
【安卓TextView限定行数最大值,点击按钮显示所有内容】
推荐阅读
- 共享充电宝系统app开发
- Android 控制ScrollView滚动到底部
- MappedByteBuffer的实际开发遇到的问题
- [转].Net Core Web应用发布至IIS后报“An error occurred while starting the application”错误
- com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: and
- Android中通过反射来设置Toast的显示时间
- android 的Manifest对图标的影响
- log4j:ERROR A "org.apache.log4j.DailyRollingFileAppender" object is not assignable to a &q
- 理解Android线程创建流程(转)