我有一个方形的 FrameLayout。我在布局中有一个 TextView 和一个供用户增加/减少 textSize 的选项。当文本大到足以填满整个 FrameLayout 时,我想限制文本增加选项。因此,如果我从 25sp 之类的东西开始,当用户达到 40sp 并且 TextView 高度超过 FrameLayout 高度时,我需要恢复到 39sp 并禁止进一步增加文本大小。TextView 的来源是可跨度的。
到目前为止,我是这样做的。
在增加按钮上,我只是setTextSize(currentValue + 1)
针对每个可跨片段;
因为当我再次 setText 时我不知道我的 TextView 的“真实”大小,所以我使用了
ViewTreeObserver vto = textView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//here I have the real sizes of the textView and if the height is too big, I simply
setTextSize(currentValue - 1)
}
缺点是增加文本 -> 再次减少它的可见操作。因此,用户会在 100 毫秒内看到文本变大然后恢复。有没有处理这个计算的好方法,所以我可以避免实际增加文本大小?