TextView文本缩小到给定的宽度

时间:2011-03-01 04:33:45

标签: android textview

我的活动中有一个textview字段。它的字体大小是16。 它的文本是通过代码设置的。假设我有一个大文本,它应该缩小这些数据(即字体大小减少),而不是转到下一行。我该怎么办?

<TextView android:id="@+id/textView" android:layout_width="400dp" android:layout_height="wrap_content" android:text="" android:textSize="16sp" />

3 个答案:

答案 0 :(得分:9)

我是根据我的要求使用以下方法得到的。

private void autoScaleTextViewTextToHeight(TextView tv)
    {
        String s = tv.getText().toString();
        float currentWidth = tv.getPaint().measureText(s);

        float phoneDensity = this.getResources().getDisplayMetrics().density;

        while(currentWidth > (REQUIRED_WIDTH * phoneDensity)) {         
            tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, tv.getTextSize() - 1.0f); 
            currentWidth = tv.getPaint().measureText(s);
        }
    }

答案 1 :(得分:1)

以下方法将TextView作为参数,并根据给定TextView的宽度调整其字体大小

private void adjustTextSize(TextView tv) {

    float size = tv.getPaint().getTextSize();
    TextPaint textPaint = tv.getPaint();
    float stringWidth = textPaint.measureText(tv.getText().toString());
    int textViewWidth = tv.getWidth();
    if(textViewWidth > stringWidth) {

        float percent = (textViewWidth / stringWidth);
        textPaint.setTextSize(size*percent);
    }
}

希望这有帮助。

答案 2 :(得分:0)

没有好办法。你可以做的是计算你将要放在这个TextView中的文本的大小,并重新调整你的字体大小,直到它适合目标区域。到calc大小使用Paint.getTextBounds()。

我在画布上绘画非常相似。请求一个减少fontsize的循环,直到calced ed大小合适。