计算出某个Font中String的宽度

时间:2012-10-30 13:59:05

标签: java android string fonts

有没有办法弄清楚某个String中某个Font的像素宽度是多少?

在我的Activity中,String上放置了动态Button。有时,String太长,而且它分为两行,这使Button看起来很难看。但是,由于我没有使用某种控制台Font,因此单个字符宽度可能会有所不同。所以写

之类的东西并不是一种帮助
String test = "someString";
if(someString.length()>/*someValue*/){
    // decrement Font size
}

因为" mmmmmmmm"比'&iii; iiiiiiii"更宽。

或者,Android中是否有一种方法可以将某个String放在一行上,因此系统会缩放"自动Font大小?

修改

因为wsanville的回答非常好,所以我的代码动态设置字体大小:

private void setupButton(){
    Button button = new Button();
    button.setText(getButtonText()); // getButtonText() is a custom method which returns me a certain String
    Paint paint = button.getPaint();
    float t = 0;
    if(paint.measureText(button.getText().toString())>323.0){ //323.0 is the max width fitting in the button
    t = getAppropriateTextSize(button);
    button.setTextSize(t);
    }
}

private float getAppropriateTextSize(Button button){
    float textSize = 0;
    Paint paint = button.getPaint();
    textSize = paint.getTextSize();
    while(paint.measureText(button.getText().toString())>323.0){
        textSize -= 0.25;
        button.setTextSize(textSize);
    }
    return textSize;
}

1 个答案:

答案 0 :(得分:4)

您应该可以使用Paint.setTypeface(),然后使用Paint.measureText()。您可以在Paint类上找到其他方法,例如setTextSize()

有关缩放文字的后续问题已在this question中解决。