Я видел это сообщение о том, как проверить, имеет ли текст размер эллипса.
Я хочу программно изменить текст, если он ellipsized
.
однако, если я использую обратный вызов в textView.post()
, изменение текста будет отображаться в пользовательском интерфейсе пользователя или вызывать проблемы с производительностью.
дополнительный комментарий:
Я пытался измерить ширину текста и ширину просмотра в treeObserver.preDraw()
, но при отладке я вижу случай, когда обе ширины равны и, тем не менее, текст заменяется, когда он не усекается.
замена условия на textWidth < viewWidth
приводит к тому, что несколько случаев non-ellipsized
текста по-прежнему заменяются более коротким.
final ViewTreeObserver[] viewTreeObserver = {myAccountView.getViewTreeObserver()};
viewTreeObserver[0].addOnPreDrawListener(
new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
int chipWidth =
myAccountView.getMeasuredWidth()
- myAccountView.getPaddingLeft()
- myAccountView.getPaddingRight();
if (chipWidth > 0) {
myAccountView.setText(
setChipTextWithCorrectLength(
getContext().getString(R.string.desc_long_length),
getContext().getString(R.string.desc_meduim_length),
getContext().getString(R.string.short_length),
chipWidth));
viewTreeObserver[0] = myAccountView.getViewTreeObserver();
if (viewTreeObserver[0].isAlive()) {
viewTreeObserver[0].removeOnPreDrawListener(this);
}
}
return true;
}
});