android textview设置大小,android – 如何缩放/调整文本大小以适应TextView?

我试图创建一个方法来调整文本视图中的多行文本,使其适合在TextView的边界(X和Y维度)。

目前,我有一些东西,但它所做的是调整文本大小,只是文本的第一个字母/字符填充TextView的尺寸(即只有第一个字母是可见的,它是巨大的)。我需要它来适应TextView的边界内的文本的所有行。

这里是我到目前为止:

public static void autoScaleTextViewTextToHeight(TextView tv)

{

final float initSize = tv.getTextSize();

//get the width of the view's back image (unscaled)....

float minViewHeight;

if(tv.getBackground()!=null)

{

minViewHeight = tv.getBackground().getIntrinsicHeight();

}

else

{

minViewHeight = 10f;//some min.

}

final float maxViewHeight = tv.getHeight() - (tv.getPaddingBottom()+tv.getPaddingTop())-12;// -12 just to be sure

final String s = tv.getText().toString();

//System.out.println(""+tv.getPaddingTop()+"/"+tv.getPaddingBottom());

if(minViewHeight >0 && maxViewHeight >2)

{

Rect currentBounds = new Rect();

tv.getPaint().getTextBounds(s, 0, s.length(), currentBounds);

//System.out.println(""+initSize);

//System.out.println(""+maxViewHeight);

//System.out.println(""+(currentBounds.height()));

float resultingSize = 1;

while(currentBounds.height() < maxViewHeight)

{

resultingSize ++;

tv.setTextSize(resultingSize);

tv.getPaint().getTextBounds(s, 0, s.length(), currentBounds);

//System.out.println(""+(currentBounds.height()+tv.getPaddingBottom()+tv.getPaddingTop()));

//System.out.println("Resulting: "+resultingSize);

}

if(currentBounds.height()>=maxViewHeight)

{

//just to be sure, reduce the value

tv.setTextSize(resultingSize-1);

}

}

}

我认为问题是在使用tv.getPaint()。getTextBounds(…)。它总是返回小的数字的文本边界…小相对于tv.getWidth()和tv.getHeight()值…即使文本大小远远大于TextView的宽度或高度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值