我17岁,我是意大利人。这是我的第一个应用程序。
我愚蠢地认为这段代码在我的交换机上独立于屏幕保持1行:
Inside at OnCreate()
while(SWITCH.getLineCount()>1)
SWITCH.setTextSize(SWITCH.getTextSize()-1);
显然不起作用.. 为什么?
我已经阅读了很多问题,但我还没有弄清楚如何根据屏幕大小动态设置字体大小。
非常感谢。
编辑:为了分心,我写了(SWITCH.getLineCount() - 1)
而不是
(SWITCH.getTextSize() - 1),
但仍然无效。
答案 0 :(得分:0)
假设你的TextView有android:maxWidth值。
以下功能:
获取最大宽度
使用Paint.measureWidth检查实际宽度
如果实际宽度超过最大值,则字体大小会按比例减少。
循环继续,直到宽度小于最大值。
出于安全原因,我引入了 iterCount 以确保循环最终结束。
我没有测试代码,但这个想法应该是明确的:
private void adjustTextSize(TextView tv, final String text) {
float maxWidth = tv.getMaxWidth() * 0.9f;
Paint p = tv.getPaint();
float fontSize = p.getTextSize();
float txtWidth;
int iterCount = 10;
while (--iterCount >= 0 && (txtWidth = p.measureText(text)) > maxWidth)
p.setTextSize(fontSize *= (maxWidth / txtWidth));
}
答案 1 :(得分:0)
您可以省略maxWidth并使用layout_width =" match_parent"。麻烦的是,在这种情况下,在布局完成之前,您还不知道尺寸。布局完成后,请参阅How to know when an activity finishes a layout pass?有关通知的信息。
从onGlobalLayout()你可以使用tv.getWidth()
final TextView tv= (TextView) findViewById(R.id.myView);
tv.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
float maxWidth = tv.getWidth() * 0.9f;
String text = getResources().getString(R.string.myTextId);
float fontSize = tv.getTextSize();
float txtWidth;
int iterCount = 10;
while (--iterCount >= 0 && (txtWidth = tv.getPaint().measureText(text)) > maxWidth)
tv.setTextSize(fontSize *= (maxWidth / txtWidth));
tv.setText(text);
}
});
我稍微更改了代码,将textSize分配给TextView,而不是底层的Paint。这种方式更正确。
答案 2 :(得分:0)
稍后看看这个库here,它会做你想做的事情
只需将编译添加到您的gradle并用<TextView
替换xml中的<me.grantland.widget.AutofitTextView
,完成,魔术完成,rs