2012-01-19 12 views
6

Jak mogę uzyskać wysokość daszka danego łańcucha?Jak mogę uzyskać wysokość daszka danego łańcucha?

enter image description here

Przykładowo

  • abc należy zwrócić 0.
  • abcl należy zwrócić 0.
  • abcp powinna powrócić odległości od linii descnder do wartości wyjściowych.
  • abclp powinien zwracać odległość od linii oparcia do linii bazowej.

Najlepszym mogę wyszedł tak daleko jest

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

Jednak moje zapachy kodu jest to, że nie są wystarczająco dobre. Czy istnieje lepszy i szybszy sposób?

Odpowiedz

-1

Powinieneś rzucić okiem na Paint.FontMetrics. Element pochylający podaje "zalecaną odległość poniżej linii podstawowej dla pojedynczego tekstu z odstępem.".

+0

Pytanie, jak się dowiedzieć, czy istnieje znak z niezerowym zejściem w obrębie danego ciągu znaków. –

+0

Przepraszam, zbyt szybko czytałem. Prawdopodobnie masz najlepsze rozwiązanie w swoim kodzie. – emidander

3

Właściwie szukałem tej samej funkcjonalności. Okazuje się, że jest znacznie prostszy sposób, nie potrzebujesz nawet do tego oddzielnej funkcji.

Jeśli po prostu wywołasz metodę getTextBounds() w danym ciągu, zwrócone pole obwiedni będzie już zawierało te informacje.

Na przykład:

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"); 

prostu mówiąc bounds.top informuje o wejście na ciąg (ma ujemną wartość jako osi Y 0 punkt jest na początku badania łańcucha) i bounds.bottom powie zejście napisu (który może być wartością 0 lub dodatnią dla łańcuchów mających zejście).

Powiązane problemy