У меня есть некоторый код, который измеряет ширину andView textView и текста для отображения в нем.
final ViewTreeObserver[] viewTreeObserver = {myAccountView.getViewTreeObserver()};
viewTreeObserver[0].addOnPreDrawListener(
new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
myAccountView.setText(R.string.og_my_account_desc_long_length);
int chipWidth = myAccountView.getMeasuredWidth();
if (chipWidth > 0) {
setChipTextWithCorrectLength(chipWidth);
viewTreeObserver[0] = myAccountView.getViewTreeObserver();
if (viewTreeObserver[0].isAlive()) {
viewTreeObserver[0].removeOnPreDrawListener(this);
}
}
return true;
}
});
}
private void setChipTextWithCorrectLength(int chipWidth) {
String desc =
setChipTextWithCorrectLength(
getContext().getString(R.string.og_my_account_desc_long_length),
getContext().getString(R.string.og_my_account_desc_meduim_length),
getContext().getString(R.string.og_my_account_desc_short_length),
chipWidth);
myAccountView.setText(desc);
}
@VisibleForTesting
String setChipTextWithCorrectLength(
String longDesc, String mediumDesc, String shortDesc, int clipWidth) {
if (textWidthPixels(longDesc) > clipWidth) {
if (textWidthPixels(mediumDesc) > clipWidth) {
return shortDesc;
} else {
return mediumDesc;
}
}
return longDesc;
}
public float textWidthPixels(String text) {
TextPaint textPaint = myAccountView.getPaint();
return textPaint.measureText(text);
}
Я изменил свое устройство a11y на самый большой шрифт и самый большой дисплей.
Я вижу в интерфейсе текст обрезан (эллипс)
но мои измерения показывают, что ширина текста (503 пикселя) меньше ширины просмотра текста (587 пикселей).
как это может быть?
как мне измерить их по-другому, чтобы мой код также указывал, что ширина текста больше ширины текстового представления?
Edit:
Я пытался добавить отступы, но это не изменилось. изменение на a11y обрезает длинный текст вместо выбора более короткого текста.
public float textWidthPixels(String text) {
TextPaint textPaint = myAccountView.getPaint();
View parent = (View) myAccountView.getParent();
float width = textPaint.measureText(text);
int paddingLeft = parent.getPaddingLeft();
int paddingRight = parent.getPaddingRight();
return width - (paddingLeft + paddingRight);
}
Edit:
Я пытался вычислить chipWidth, учитывая его отступы, но все же textSize заставляет текст обрезаться, в то время как его размер в коде становится короче, чем размер представления
int chipWidth = myAccountView.getMeasuredWidth() - myAccountView.getPaddingLeft() - myAccountView.getPaddingRight();