我扩展com.google.android.material.chip.Chip
我在onMeasure
中有一个要测量的文本。
我的计算表明文本可以适合芯片的空间,但实际上我看到文本被截断了。
我不希望截断,因为我在布局通过之前就进行了测量。
*我使用最大的显示大小,最大的字体大小,乌克兰字体。
我应该以某种方式更改我的测量代码吗?
private String getLongestPossibleChipText(int textMaxWidth) {
final MarginLayoutParams layoutParams = (MarginLayoutParams) getLayoutParams();
final View parent = (View) getParent();
final int parentPaddingLeft = parent.getPaddingLeft();
final int parentPaddingRight = parent.getPaddingRight();
final int paddingLeft = getPaddingLeft();
final int paddingRight = getPaddingRight();
final int leftMargin = layoutParams.leftMargin;
final int rightMargin = layoutParams.rightMargin;
final int currentTextMaxWidth =
parentWidth
- (parentPaddingLeft
+ parentPaddingRight
+ paddingLeft
+ paddingRight
+ leftMargin
+ rightMargin);
final TextPaint paint = getPaint();
for (String chipText : chipTexts) {
if (paint.measureText(chipText) <= currentTextMaxWidth) {
return chipText;
}
}
return Iterables.getLast(chipTexts);
}
我认为文字长度计算不正确。从ChipDrawable的文档中可以看到Chip的一些内部结构,我认为代码无法解释。 (Chip是ChipDrawable的包装。)我将在此处重现该图:
可能是内部填充全为零,所以没关系。尽管如此,ChipDrawable中的calculateTextBounds()方法可能是一个很好的起点。