无法在给定的textview高度内拟合角色

时间:2014-05-11 08:34:04

标签: android textview

我有一个身高maxHeight的文字视图。我使用以下函数来选择字符串的字体大小以适应textview。该函数返回fontsize,使字符串的高度与textview宽度匹配。该字符串是一位数字。但是textview只显示字符串的一部分。有什么问题?

private int determineMaxTextSizeH(String str, float maxHeight) {
    int size = 0;
    Paint paint = new Paint();

    Rect bounds = new Rect();
    do {
        paint.setTextSize(++ size);
        paint.getTextBounds(str, 0, 1, bounds);
    } while (Math.abs(bounds.height()) < maxHeight);

    return --size;
}

这是字符串的显示方式。

LayoutParams params;
params = textview.getLayoutParams();
params.height = maxHeight;
params.width=maxHeight;
textview.setLayoutParams(params);
int textsize=determineMaxTextSizeH("4", maxHeight);
textview.setTextSize(textsize);
textview.setText("4");

textview的XML代码如下。

   <TextView 
android:id="@+id/textview"
android:textColor="#aaaaaa"
android:background="@drawable/scorecircle"
android:gravity="center_vertical|center_horizontal" 
android:layout_width="30dp"
android:layout_height="30dp"

/>

这是结果。完整的圆圈是相关的文本视图。圆圈是背景图层列表XML。我试着写#34; 4&#34;。

enter image description here

1 个答案:

答案 0 :(得分:0)

看起来paint.setTextSize()设置文字大小(以像素为单位),因此determineMaxTextSizeH()也会返回以像素为单位的值。

textview.setTextSize()默认设置SP中的文字大小。试试这个:

textview.setTextSize(TypedValue.COMPLEX_UNIT_PX, textsize)

UPD

我发现TextView使用字体填充来绘制文本。因此,我将determineMaxTextSizeH()代码更改为尊重字体指标:

private int determineMaxTextSizeH(float maxHeight)
{
    int size = 1;
    Paint paint = new Paint();

    FontMetrics fm = new FontMetrics();
    do
    {
        paint.setTextSize(++size);
        paint.getFontMetrics(fm);
    } while((Math.abs(fm.top) + Math.abs(fm.bottom)) < maxHeight);

    return --size;
}

设置TextView:

textview.setIncludeFontPadding(false);
LayoutParams params = textview.getLayoutParams();
params.height = maxHeight;
params.width= maxHeight;
textview.setLayoutParams(params);
int textsize = determineMaxTextSizeH(maxHeight);
textview.setTextSize(TypedValue.COMPLEX_UNIT_PX, textsize);
textview.setText("4");

我的TextView的XML代码:

<TextView
android:id="@+id/tv_text"
android:layout_width="30dp"
android:layout_height="30dp"
android:gravity="center"
android:background="#FFBBBBBB"/>

它在我的设备上工作,但填充物仍在那里。