我有一个身高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;。
答案 0 :(得分:0)
看起来paint.setTextSize()
设置文字大小(以像素为单位),因此determineMaxTextSizeH()
也会返回以像素为单位的值。
但textview.setTextSize()
默认设置SP中的文字大小。试试这个:
textview.setTextSize(TypedValue.COMPLEX_UNIT_PX, textsize)
我发现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"/>
它在我的设备上工作,但填充物仍在那里。