正方形の FrameLayout があります。レイアウト内に TextView があり、ユーザーが textSize を増減するオプションがあります。テキストが FrameLayout 全体を埋めるのに十分な大きさの場合、テキストの増加オプションを制限したいと考えています。したがって、25sp のようなものから始めて、ユーザーが 40sp に達し、TextView の高さが FrameLayout の高さを超えると、39sp に戻して、テキスト サイズをさらに大きくすることを禁止する必要があります。TextView のソースはスパン可能です。
これが私がこれまでに行った方法です。
増加ボタンではsetTextSize(currentValue + 1)
、スパン可能なフラグメントごとに単純に I します。
再度 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 ミリ秒ほどテキストが大きくなってから元に戻るのを見るでしょう。実際にテキストサイズを大きくすることを避けることができるように、この計算を処理する良い方法はありますか?