内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

乐虎娱乐pt手机客户端小米线刷时出现的七种杂症解决办法

> 资讯 >

乐虎国际娱乐平台TextView文字长度测量和各种Padding解析

2017-12-30 11:40 出处:乐虎娱乐pt手机客户端 人气:   评论(0

  虽然我们日常平凡只用TextView显示纯文本数据,但其实TextView支撑设置Background,四周的drawable小图标,以及Span数据好比文本或图片。正在Android里不管是什么控件都是占领一个矩形的空间,那么正在一个TextView里该若何计较各个矩形的大小呢?下面是TextView供给的各个获取长度宽度的接口:

  getExtendedPaddingTop():这个是当有部门文字没有显示出来时,也就是设置了maxLine时,它的值就等于首行文字到TextView顶端的距离。同理,getExtendedPaddingBottom()就是最初一行文字到TextVeiw底部距离。其他环境下,他的值等于getCompoundPaddingTop/Bottom()的值。这个源码不多,但也不怎样好讲解,就贴两张图对比下,就大白了。

  这些接口除了前面两个比力常用外,其他根基很罕用吧,我也是由于正在看TextView的赛马灯部门的源码才接触到,然后为了弄大白才记实下来的。至于后面那些接口的使用场景,getCompoundPadding()这个的使用场景却是很明白,能够用来判断响应的drawable能否发生点击事务之类的需求。至于extendedPadding和totalPadding这两个的使用场景,我想了想,感觉该当是涉及需要计较显示出来后的文字高度的相关需求时会用到吧。有对这些接口很熟悉的童鞋能够分享出来哈,一路进修进修。

  最初用一张图总结一下,我把TextView分成内容区域,内容区域和TextView鸿沟之间的间隔就是padding的值,内容区域包罗drawable区域和文字区域,drawable区域和文字区域之间的间隔就是drawablePadding的值,文字区域和TextView之间的间隔就是CompoundPadding的值。

  A:再看一下上面那部门内容你就清晰了,只要当TextView宽度设置为wrap_content,且没有布景图或drawable时,文字的长度才等于getWidth();当文字很少,没有填充满时,或是溢出时,文字的长度都得别的计较。

  A:看需求吧,我感觉凡是环境下都是只需要计较显示正在屏幕上的可见区域的每行文字的长度即可。还有那么一种需求,当设置了溢出内容用...暗示时,那么其实每行文字的现实长度就不止可见区域那么长了。

  那么该若何计较文字的长度呢?单单按照上一部门里的各类Padding值必定不敷,按照各类Padding顶多计较出文字区域的宽度,但现实上每一行文字并不会那么方才好占满文字区域的宽度,那么就还得借帮其他来进行计较。

  但这种方式只是测试传入的text正在该TextView的设置装备摆设下的总长度,并不是计较每一行的长度。

  TextView对应的是图14,正好,操纵方式1验证一下,这个方式计较获得的是不是每行文字的长度。

  完全准确,所以说这个方式确实计较获得的是每一行文字的现实长度,留意这里是现实长度,也就是说当设置singleLine属性时,用这个方式丈量获得的是一整行文字的长度,包罗溢出部门。

  官方是保举说不要再利用singleLine,用maxLines=1取代。但其实这两个的结果是纷歧样的,官方api接口里有申明,都是英文我就不贴图了,大要翻译下:

  区别就是:maxLines仍是会默认从动进行换行策略,假如一段文字从动换行后有5行,maxLines设置为1,那么就只显示第一行的内容,其他行不显示。

  可是,若是是设置了singleLine, 那么这段能够有5行的文字将会被强制放正在1行里,然后看最多能显示几多字符,剩下的不显示。

  如许的区别就是导致了良多人正在利用TextVeiw的赛马灯结果时不克不及一般工做的形态,所以下面零丁列出个问题来讲。

  大白了maxLines=1和singleLine的区别后,只需再大白赛马灯的道理,就很容易理解为什么设置成maxLines=1时赛马灯不工做了。我正在上一篇博客里写过赛马灯启动的前提,具体的阐发能够去上一篇看,这里大要说下。

  赛马灯要启动要同时满脚四个前提,此中有一个前提就是这一行的文字长度要大于文字区域的宽度,文字区域的宽度就是TextView的getWidth()扣去ComPoundpaddingLeft再扣去CompoundPaddingRight剩下的长度。

  若是是maxLines=1的话,那么就像上一问平分析的那样,所有的文字其实曾经被从动换行了,只显示第一行,而换行是什么,就是为了让每行文字的长度跨越文字区域的宽度才进行的换行,也就是说,若是一段文字颠末TextView的换行后,那么每行的文字长度都不会跨越文字区域的长度。如许一来,天然就不满脚赛马灯的启动前提之一了,赛马灯也就不克不及一般工做了。

  singleLine的话,则是不会对一段文字进行换行处置,如许一来,天然就跨越了文字区域的长度,所以若是要设置赛马灯结果的话,只能用singleLine不克不及用maxLines=1。

乐虎国际娱乐平台 玩家公认最具信誉老虎机平台,秒提款20万,4大老虎平台!老虎机,pt老虎机,电子老虎机,老虎机现金网,游戏网,电子游艺。
分享给小伙伴们:
本文标签: measurestrin

相关文章

评论

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

签名: 验证码: 点击我更换图片

评论列表

    Copyright © 2015-2017 乐虎娱乐pt手机客户端 版权所有 网站地图