TextViewの横幅にフィットする文字列のサイズを得る関数

というわけで、TextView Fit Width とかでさらっと検索しても見つけられなかったから面倒だけど自分で書いてみた。

private float textSizeForString(TextView myTextView, String s) {
    float originalTextSize = 20;
    myTextView.setTextSize(originalTextSize);   // 20をセットしたのに
    float textSize = myTextView.getTextSize();  // これが 30になる
    double ratio = (double) (textSize/originalTextSize);

    float tvWidth = myTextView.getWidth();
    float textWidth;
    Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

    while (true) {
    	textPaint.setTextSize(textSize);
    	textWidth = textPaint.measureText(s);
    	if (textWidth < tvWidth || textSize == MIN_SIZE) {
            break;
    	}
    	textSize -= 1;
    }

    return (float) (textSize / ratio);
}

TextView とそこに表示する String を渡すと、TextView にセットするべき TextSize が返ってくる。


originalTextSizeは layoutの xmlで指定してある数字。
myTextViewが文字列を収める TextView。
MIN_SIZEは TextSizeの最小値。とりあえず 1で指定してるけど、これじゃ見えないって!