Chciałbym też uzyskać wzrost, jeśli to możliwe.
android
string
bounding-box
Mikael Lindlöf
źródło
źródło
textView.setTextSize()
.Jeśli potrzebujesz tylko szerokości, możesz użyć:
http://developer.android.com/reference/android/graphics/Paint.html#measureText(java.lang.String)
źródło
TextPaint paint = new TextPaint(); paint.setTextSize(textSize);
.textSize
jest w pikselach.Istnieją dwie różne miary szerokości tekstu. Jedna to liczba pikseli, które zostały narysowane na szerokość, druga to liczba „pikseli”, które należy przesunąć kursor po narysowaniu tekstu.
paint.measureText i paint.getTextWidths zwracają liczbę pikseli (w liczbie zmiennoprzecinkowej), o którą kursor powinien zostać przesunięty po narysowaniu danego ciągu. Aby określić liczbę pomalowanych pikseli, użyj funkcji paint.getTextBounds, jak wspomniano w innej odpowiedzi. Uważam, że nazywa się to „Advance” czcionki.
W przypadku niektórych czcionek te dwa wymiary różnią się (bardzo), na przykład czcionka Black Chancery ma litery, które wykraczają poza inne litery (nakładają się) - patrz duże „L”. Użyj paint.getTextBounds, jak wspomniano w innej odpowiedzi, aby pomalować piksele.
źródło
Zmierzyłem szerokość w ten sposób:
To by ci pomogło.
źródło
Najprawdopodobniej chcesz poznać pomalowane wymiary dla danego ciągu tekstu z określoną czcionką (tj. Konkretną
Typeface
rodziną czcionek „sans-serif” ze stylem BOLD_ITALIC i określonym rozmiarem w sp lub px).Zamiast nadmuchać pełnowymiarowy
TextView
, możesz zejść niżej i pracować zPaint
obiektem bezpośrednio dla tekstu jednowierszowego , na przykład:W przypadku tekstu wielowierszowego lub łączonego (
SpannedString
) rozważ użycie znakuStaticLayout
, w którym podajesz szerokość i uzyskujesz wysokość. Aby uzyskać bardzo szczegółową odpowiedź na temat mierzenia i rysowania tekstu na płótnie w niestandardowym widoku, patrz: https://stackoverflow.com/a/41779935/954643Warto również zwrócić uwagę na poniższą odpowiedź @ arberga na temat pomalowanych pikseli w porównaniu z szerokością wyprzedzenia ("liczba pikseli (w liczbie zmiennoprzecinkowej), o którą kursor powinien zostać przesunięty po narysowaniu danego ciągu"), na wypadek gdybyś musiał sobie z tym poradzić.
źródło
Chciałbym podzielić się lepszym (bardziej wszechstronnym niż obecnie akceptowana odpowiedź) sposobem uzyskania dokładnej szerokości rysowanego tekstu (
String
) przy użyciu klasy statycznejStaticLayout
:ta metoda jest dokładniejsza niż
textView.getTextBounds()
, ponieważ można obliczyć szerokość pojedynczej linii w multiliniiTextView
lub nie używać jejTextView
na początku (na przykład w niestandardowejView
implementacji).Ten sposób jest podobny
textPaint.measureText(text)
, jednak w rzadkich przypadkach wydaje się być dokładniejszy.źródło