2016-04-08 12 views
-2

Ich kopierte den Code von this question und es funktioniert fast perfekt, das Problem ist, dass der Autor die Höhen der Listenelemente auf feste Werte setzt, und es wird nicht korrekt auf meinem Gerät angezeigt.Android - messen Höhe des Textes

Der Code legt die Höhe der Listenelemente bis 150, und ich dachte: „Hey, ich werde die Höhe meines Textes nur messen“, und ich rufe so

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG); 
Rect bounds = new Rect(); 
paint.getTextBounds("April 3, 2016", 0, 13, bounds); 
Log.d("Fragment.toggle", "Text height is " + bounds.height()); 

und für Text, der leicht ist größer als der 150 feste Wert ist die von getTextBounds() zurückgegebene Texthöhe 12. Da 12 nicht "etwas größer" als 150 ist, habe ich eindeutig etwas falsch gemacht.

Ich habe eine Menge Software in meinem Leben geschrieben, aber dies ist mein erster Tag mit Android-Entwicklung, also mache ich wahrscheinlich etwas offensichtlich dumm. Ich vermute, dass die zwei Werte (150 und 12) in verschiedenen Einheiten sind, aber ich habe in der Dokumentation herumgestochert und kann es nicht herausfinden.

Wie kann ich die Höhe meines Textes berechnen, in welcher Einheit AbsListView.LayoutParams erwartet?

+0

Worauf warten Sie, dass das Paint-Objekt für diesen bestimmten Aufruf zurückgegeben wird? Ich verstehe nicht, wie du denkst, dass damit offensichtlich etwas nicht stimmt. –

+0

Wenn Sie Text anzeigen möchten, verwenden Sie ein TextView, legen Sie die Textgröße in SP (Pixel skaliert) fest, Android wird alles andere tun. – ElDuderino

+0

Danke für das Springen in Jungs, das Problem ist, dass ich genug von einem Android-Neuling bin, dass ich nicht einmal sicher bin, wie man die Frage stellt. Wenn Sie dem Link zu "dieser Frage" folgen, ist dies eine weitere StackOverflow-Seite mit dem Titel "Wie kann ich eine Zelle in einer ListView in Android vergrößern und verkleinern, wenn sie berührt wird?". Es hat fest codierte Werte für die Höhe der Listenelemente (Zahlen wie 150) und ich möchte diese Werte berechnen, anstatt sie hart zu codieren. –

Antwort

0

Ich endlich diese Frage in die Unterwerfung zu schlagen.

Der erste Teil der Antwort ist, dass der Rückgabecode von getTextBounds() in Punkten ist (wäre es nicht nett, wenn die Dokumentation das sagt?). Teilen dieser Antwort durch 72 gibt meine Texthöhe in Zoll, multipliziert mit DisplayMetrics.DensityDpi gibt die Höhe des Texts in Pixel.

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG); 
Rect bounds = new Rect(0, 0, 10000, 10000); 
paint.getTextBounds("April 3, 2016", 0, 13, bounds); 
DisplayMetrics dm = getActivity().getResources().getDisplayMetrics(); 
float textHeightInches = bounds.height()/72.0f; 
float textHeightPixels = textHeightInches * dm.densityDpi; 

Der zweite Teil der Antwort ist, dass das Listenelement Polsterung auf der Ober- und Unterseite aufweist, die aufgenommen werden müssen, wenn die Gesamthöhe zu berechnen.

Wenn ich jetzt die ListItem-Objekte erstelle, kann ich statt einer festen Zahl meine berechnete Höhe übergeben.

Verwandte Themen