Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法在给定的textview高度内容纳字符_Android_Textview - Fatal编程技术网

Android 无法在给定的textview高度内容纳字符

Android 无法在给定的textview高度内容纳字符,android,textview,Android,Textview,我有一个高度maxHeight的文本视图。我使用下面的函数来选择字符串的字体大小以适合文本视图。函数返回fontsize,以便字符串的高度与textview宽度匹配。字符串是一个单位数。但是,textview仅显示字符串的一部分。怎么了 private int determineMaxTextSizeH(String str, float maxHeight) { int size = 0; Paint paint = new Paint(); Rect bounds

我有一个高度maxHeight的文本视图。我使用下面的函数来选择字符串的字体大小以适合文本视图。函数返回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;
}
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。我试着写4

看起来像paint.setTextSize以像素为单位设置文本大小,因此DetermineMxtSizeh也返回以像素为单位的值

但是默认情况下,textview.setTextSize在SP中设置文本大小。试试这个:

textview.setTextSize(TypedValue.COMPLEX_UNIT_PX, textsize)
UPD 我发现TextView使用字体填充来绘制文本。因此,我将determineMxtSizeh代码更改为尊重字体度量:

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;
}
my TextView的XML代码:

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
android:id="@+id/tv_text"
android:layout_width="30dp"
android:layout_height="30dp"
android:gravity="center"
android:background="#FFBBBBBB"/>

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

4后面的圆圈是什么?不管怎样,你的代码看起来是正确的,我还没有试过。您确定没有为textView设置任何填充吗?请同时发布xml代码。编辑以回答疑问。没有填充设置。
<TextView
android:id="@+id/tv_text"
android:layout_width="30dp"
android:layout_height="30dp"
android:gravity="center"
android:background="#FFBBBBBB"/>