2012-01-19 15 views
6

Come posso ottenere l'altezza del discensore di una determinata stringa?Come posso ottenere l'altezza del discensore di una determinata stringa?

enter image description here

Per esempio,

  • abc dovrebbe restituire 0.
  • abcl dovrebbe restituire 0.
  • abcp dovrebbe restituire distanza dalla linea di descnder al basale.
  • abclp deve restituire la distanza dalla linea di discendenza alla linea di base.

il meglio che potessi uscito finora è

private int getDecender(String string, Paint paint) { 
    // Append "l", to ensure there is Ascender 
    string = string + "l"; 
    final String stringWithoutDecender = "l"; 

    final Rect bounds = new Rect(); 
    final Rect boundsForStringWithoutDecender = new Rect(); 
    paint.getTextBounds(string, 0, string.length(), bounds); 
    paint.getTextBounds(stringWithoutDecender, 0, stringWithoutDecender.length(), boundsForStringWithoutDecender); 
    return bounds.height() - boundsForStringWithoutDecender.height(); 
} 

Tuttavia, il mio codice odore è che essi non sono abbastanza buone. C'è un modo migliore e più veloce?

risposta

-1

Si dovrebbe dare un'occhiata a Paint.FontMetrics. Il membro di discesa ti darà "La distanza raccomandata sotto la linea di base per il testo distanziato singolarmente".

+0

La domanda come scoprirlo, c'è un carattere con una discesa diversa da zero all'interno di una determinata stringa. –

+0

Scusa, ho letto troppo velocemente. Probabilmente hai la migliore soluzione nel tuo codice. – emidander

3

In realtà stavo cercando la stessa funzionalità. Si scopre che c'è un modo molto più semplice, non hai nemmeno bisogno di una funzione separata per quello.

Se si chiama getTextBounds() su una determinata stringa, il riquadro di restituzione restituito avrà già quell'informazione.

Ad esempio:

paint.getTextBounds(exampleString1 , 0, exampleString1.length(), bounds); 

if (bounds.bottom > 0) Log.i("Test", "String HAS descender"); 
else Log.i("Test", "String DOES NOT HAVE descender"); 

Semplicemente dicendo bounds.top ti dice l'ascesa della stringa (che ha valore negativo come asse Y 0 punto è alla base della stringa) e bounds.bottom ti dice la discesa della stringa (che può essere 0 o valore positivo per le stringhe con discesa).

Problemi correlati