I zostały próby rysunek to jedno z ostatnich kilku dni teraz, i nie miał powodzenia ...Android Spannable Linia Wysokość
uczę androida teraz, i obecnie stworzenie kalkulatora z historią jako moim projektem edukacyjnym. Mam TextView, który jest odpowiedzialny za wyświetlanie całej historii ... Używam cyfrowej czcionki, która wygląda jak czcionka kalkulatora, ale to dobrze wygląda tylko dla cyfr i dziesiętnych i przecinków. Chcę, żeby wszyscy operatorzy byli wyróżnieni i mieli inną czcionkę (Arial Narrow w tej chwili). Udało mi się sprawić, by działało to pięknie, używając ciągu spannable, w którym określam kolor czcionki, a także czcionkę, używając klasy CustomTypeFaceSpan, aby zastosować własne czcionki.
Problem ... Kiedy miksuję kroje pisma, wydaje się, że istnieje problem z wysokością linii, więc znalazłem this post, który demonstruje użycie innej niestandardowej zdefiniowanej klasy, aby zastosować wysokość linii do każdej dodanej linii tekstu spannable:
public class CustomLineHeightSpan implements LineHeightSpan{
private final int height;
public CustomLineHeightSpan(int height){
this.height = height;
}
@Override
public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v, FontMetricsInt fm) {
fm.bottom += height;
fm.descent += height;
}
}
To nie działa, a ja nie mogę zrozumieć dlaczego. Jeśli nie zastosuję różnych krojów, to zostanie wyświetlony zgodnie z oczekiwaniami, bez spacji powyżej pierwszej linii i około 5px odstępu między wierszami. Gdy stosuję alternatywne kroje pisma, istnieje odstęp od 10 do 15 pikseli nad pierwszą linią tekstu, a odstępy między wierszami są takie same od 10 do 15 pikseli.
Nie ma różnicy w rozmiarze czcionki, tylko krój czcionki. Czego mi brakuje. Zaimplementowałem CustomLineHeightSpan, która implementuje LineHeightSpan i zastępuje metodę chooseHeight. Nazywam to tak:
WordtoSpan.setSpan (nowy CustomLineHeightSpan (10), operatorPositions.get (ii), operatorPositions.get (ii) + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Wygląda na to, że nie ma znaczenia, co wywołałem w CustomLineHeightSpan. Nic się nie zmienia ...
Ktoś ma pojęcie o tym, czego mi brakuje ... Jestem pewien, że to odpowiedź "nie mogę uwierzyć, że tęskniłem", ale nie mogę tego rozgryźć za chwilę.
Dzięki za pomoc chłopaki :-)
Jak wywołać tę metodę chooseHeight? – AndroidCrazy
Android wywołuje tę metodę wewnętrznie. Wszystko, co musisz zrobić, to nadać swojemu Stringowi rozpiętość. Jeśli chcesz dowiedzieć się więcej, sprawdź klasę android.text.StaticLayout. Również tam są wywoływane metody dla innych przęseł. – thehayro
Jeśli kiedykolwiek się spotkamy, jestem ci winien piwo (lub inny napój z wyboru) - to jest super nieudokumentowane i znalezienie go zajmuje szalony czas. – secureboot