博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android一种常见的布局困扰
阅读量:6574 次
发布时间:2019-06-24

本文共 1413 字,大约阅读时间需要 4 分钟。

序言:步入社会之后有很多东西都变得身不由己了,比如说加班,放假之前的一个礼拜都处于加班的状态,加班归加班,但是问题还是得要记录一下的,话不多说,直接上图:

相信大多数人都遇到过这样的需求,一个Item中的标题后面跟了一个标签,最多只能显示一行,而标签是首先需要展示的,也就是说标签必须展示完全,然后标题尽可能多的展示文字,一行不够的话就用...来代替。好了,让我们来分析一下:

**错解:**这里特别说明一下,很多人就觉得直接让标签居右边显示然后标题在标签的左边占有剩下的布局就好了,当标题和标签的文字很短时,这样就不能让文字相互挨着了,所以这样做显然是行不通的;还有的人可能会觉得,用线性布局,标签自适应,标题设置权重就好了,这样做有可能的后果同上,当标题文字很短时,两边文字也不能相互挨着了,最后相信大部分人都会选择让UI去屎吧,设计的啥X玩意儿,但是人设计师会说IOS都实现了,你们Android应该也能实现的啊!WTF!!!骂过之后还是得乖乖的把它给实现,这就是程序猿的命啊!

**正解:**抱怨完之后,咱们来想想有没有啥解决办法,首先我想到的是动态的给标题设置空间,先让标签布局好,然后计算掉标签所花费的空间,还有其他一些边距神马的,再计算屏幕的宽度,然后减去标签以及边距所占的空间,剩下的就是标题的空间了。那我们又是如何计算文字宽度的呢?

获取文字宽度方法:

TextPaint textPaintTitle=tvTitle.getPaint();//title是textview所展示的文字int textTitleWidth = (int) textPaintTitle.measureText(title);复制代码

这样就可以获取textview的宽度了:

private void setText() {    tvTitle.setText(title);    tvLabel.setText(label);    textPaintTitle = tvTitle.getPaint();    textPaintLabel = tvLabel.getPaint();    int screenWidth = ScreenUtil.getScreenWidth(this);    int textTitleWidth = (int) textPaintTitle.measureText(title);    int textLabelWidth = (int) textPaintLabel.measureText(label);    //这60dp是textview的一些边距神马的,具体可以去布局文件中计算    int totalLeaveWidth = screenWidth - textLabelWidth - ScreenUtil.dp2px(this, 60.0f);    if (textTitleWidth > totalLeaveWidth) {        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tvTitle.getLayoutParams();        params.width = totalLeaveWidth;    }}复制代码

这样就可以解决上述的问题了:

转载地址:http://wogjo.baihongyu.com/

你可能感兴趣的文章
git的基本使用
查看>>
Latent Semantic Analysis (LSA) Tutorial第一部分(转载)
查看>>
【CF311E】biologist
查看>>
将vim打造成python开发工具
查看>>
sql中去掉字段的所有空格
查看>>
添加头像
查看>>
Django 模板层
查看>>
Html5学习进阶一 视频和音频
查看>>
ap.net core 教程(三)
查看>>
【转】虚拟机下安装小红帽Linux9.0图解
查看>>
经验的总结,需要记录。
查看>>
我的家庭私有云计划-21
查看>>
运维人员如何最大限度避免误删除文件(20160627更新)
查看>>
《构建高可用Linux服务器(第二版)》正式发售
查看>>
Nginx upstream的几种分配方式
查看>>
高薪源于专注和极致!
查看>>
Lync Server 2010的部署系列_第三章 证书、架构、DNS规划
查看>>
SCCM 2012系列17 操作系统播发⑥
查看>>
SystemCenter2012SP1实践(12)服务器、网络和存储配置
查看>>
微软System_Center_2012合作伙伴销售工具
查看>>