2012-10-30 10 views
8

C'è un modo per capire quanti pixel di larghezza è un certo String in un determinato Font?Figura di larghezza di una stringa in un determinato carattere

Nel mio Activity, ci sono dinamici String s messi su un Button. A volte, lo String è troppo lungo ed è diviso su due righe, ciò che rende lo Button brutto. Tuttavia, poiché non utilizzo una sorta di console Font, le singole larghezze di caratteri possono variare. Quindi non è un aiuto scrivendo qualcosa come

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

perché un "mmmmmmmm" è più ampio di quello "iiiiiiii".

In alternativa, c'è un modo in Android per adattare un determinato String su una singola riga, quindi il sistema "ridimensiona" automaticamente la dimensione Font?

EDIT:

dal momento che la risposta da wsanville era veramente bello, ecco la mia impostazione della dimensione del carattere dinamico di codice:

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; 
} 

risposta

4

Si dovrebbe essere in grado di utilizzare Paint.setTypeface() e poi Paint.measureText(). Troverai anche altri metodi nella classe Paint come setTextSize().

La domanda di follow-up relativa al ridimensionamento del testo è stata risolta in this question.

+0

grazie per il suggerimento molto utile, vedere la mia soluzione nella risposta originale –

Problemi correlati