Android UI 的适配想必都会让大家头疼,比如最近我就有一个需求是这样的:
image.png
规则是这样的:
- 如果这个两个标签的长度超过容器的宽度,设置第一个标签最大字符为6个
- 如果设置完之后,还超出容器的宽度(有可能第二个很长),第二个不显示,只显示第一个
看起来很简单,但是看到第二条规则,其实就是需要二次测量,就是对第一次设置setMaxEms(6)
之后的长度。让我measureText
我会,但重点 6个单位的ems
的长度是多大呢?带着疑问我Google、百度了很多资料,都怎么说清楚,只是说一个印刷单位
An em is a unit in the field of typography
em是一个印刷排版的单位,表示字宽的单位。 em字面意思为:equal M (和M字符一致的宽度为一个单位)简称em
但是这解决不了问题啊,所以咱们看下源码吧:
public void setMaxEms(int maxEms) {
mMaxWidth = maxEms;// 和maxWidth 有关系
mMaxWidthMode = EMS;
requestLayout();
invalidate();
}
上面的只是设置的,要用到这个maxEms 肯定是会在onMeasure 的时候用到
if (mMaxWidthMode == EMS) {
width = Math.min(width, mMaxWidth * getLineHeight());
} else {
width = Math.min(width, mMaxWidth);
}
if (mMinWidthMode == EMS) {
width = Math.max(width, mMinWidth * getLineHeight());
} else {
width = Math.max(width, mMinWidth);
}
网友评论