我在post上看到了如何检查文本是否为椭圆形。
如果是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;
}
});