2017-10-19 02:52
最近发现一些开源的现成的轮子,都很实用。
BaselineGridTextView
是一种在一定程度上自动为文字排版的TextView。这个组件设想屏幕上有一个4dp格子组成的网格,然后将文字根据这个网格进行放置。这样在TextView内部和多个TextView之间,文字不会挤在一起,会有整齐的行距。比人工设置行距和padding要简单。
先解释一下概念:在排版中,字母文字带有所谓的Baseline基线。我们刚学英文的时候都使用过一种书写练习本,每一行由四条横线分成三行空行,字母就写在这四条横线上。Baseline相当于第三条横线。
BaselineGridTextView
在构建和onMeasure
阶段,做了这样三件事:
setLineSpacing
方法,确保行高(每行文字高度加上行距)是4dp的倍数。onMeasure
方法中,通过在整个TextView上方加上额外的padding的方法,确保第一行文字的Baseline与网格重合。这个额外的padding最终会成为paddingTop
的一部分。这个过程有可能会改变行数,所以之后onMeasure
还要重新检查一下行数,设置一下setMaxLines
。
找机会试一下这个组件进行中文排版的效果。