2012-10-30 62 views
8

是否有任何方法可以計算出在某個Font中某個String是多少像素寬?找出特定字體中字符串的寬度

在我的Activity,有動態String s放在Button。有時,String太長,它分成兩行,這使Button看起來很醜。但是,由於我不使用某種控制檯Font,單個字符寬度可能會有所不同。所以這不是一個幫助寫類似

String test = "someString"; 
if(someString.length()>/*someValue*/){ 
    // decrement Font size 
} 

因爲「mmmmmmmm」比「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; 
} 

回答

4

您應該能夠使用Paint.setTypeface(),然後Paint.measureText()。您還可以在Paint課程中找到其他方法,如setTextSize()也可以提供幫助。

關於縮放文本的後續問題已在this question中解決。

+0

非常感謝您的提示,請參閱原文中的解答 –

相關問題