Ich würde nicht sagen, dass meine App Text schwer ist ... aber es zeigt gelegentlich Zeichenfolgen, die länger als andere sind. Sie passen gut zu meinem Droid 2, aber ich weiß, dass sie bei kleineren Droiden nicht das Gleiche zeigen werden. Kennt jemand die richtige Art der Formatierung unterschiedlich großen Textes, um sicherzustellen, dass es auf allen Androiden funktioniert?Sollte ich Dip, DP, SIP oder SP für die Textformatierung verwenden?
Antwort
Wenn Sie nur einige Text größer oder kleiner machen möchten, sollten Sie Standardstile von Android zur Verfügung gestellt lieber mit:
<TextView ... android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView ... android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView ... android:textAppearance="?android:attr/textAppearanceSmall" />
Keiner von ihnen ist standardmäßig Standard ist:
<TextView ... android:textAppearance="?android:attr/textAppearance" />
Es kann sicherlich nicht nur auf TextView
angewandt werden, sondern auch auf andere Ansichten.
Google empfiehlt die Verwendung von sp für Textgrößenbemaßungen. Die Layouts, die Sie verwenden, müssen funktionieren, wenn das Layout skaliert wird, funktioniert es in allen Größen bestmöglich (Sie benötigen möglicherweise Layouts für verschiedene Bildschirmgrößen). Wenn der Text nicht passen kann, es wickeln oder ellipsize es
SP und DP scheinen nicht so zu funktionieren, wie Sie es erwarten würden. DP soll "displayunabhängig" sein, und SP wird als das gleiche beschrieben; aber kann skaliert werden (vermutlich durch "Zoom" -Befehle). Sie funktionieren jedoch nicht wie erwartet.
Zum Beispiel habe ich zwei Geräte, ein 320x480 Telefon und ein Nexus; was ist 800x1280 aber was beschreibt sich als sw600 (ich habe keine Ahnung warum). Um zu sehen, was vor sich ging, fügte ich meiner Ansicht eine Textansicht hinzu, die aus 60 'X' Zeichen besteht (gewählt, weil sie das gleiche Kerning wie der monospaced aussehen).
Die textView textSize wurde auf 10dp eingestellt und 60 davon füllen den Nexus-Bildschirm vollständig aus. Sie erscheinen jedoch auf dem Telefon genau gleich groß und bilden fast zwei Zeilen.
So scheint es, dass DP nicht displayunabhängig ist; sondern beschreibt lediglich die (ungefähre) Anzahl von Pixeln, die jedes Zeichen maximal erhalten wird. Das Definieren der Dimension in SP macht keinen Unterschied.
Dies ist nicht sehr hilfreich - ich hatte erwartet, dass irgendeine Form der Skalierung angewendet werden würde, so dass ich eine geeignete Größe auf meinem Telefon wählen konnte, und es würde für den Nexus skaliert werden.
Zum Beispiel, wenn meine Zeile Text etwa dreißig Zeichen lang war, und ich wollte, dass es eine ganze Zeile über den Bildschirm füllt, würde ich es als 10dp definieren; und jedes dp wäre (ungefähr) ein Pixel. Dann, wenn es auf dem Nexus gezeichnet wurde, würde jeder dpi zwei Pixel sein, und es würde doppelt so groß erscheinen.
So funktioniert das nicht, soweit ich das beurteilen kann; was es ziemlich nutzlos macht.
Meine einzige Lösung, und es ist nicht ein eleganter ein, ist nur zu verwenden Dimensionen aus einer dimens.xml-Datei, und sechs von ihnen zu haben, eine für jede der gemeinsame Breiten (240,320,480,600,720,800 - etwas höher können sortieren selbst aus), dann entwerfe ich meinen Code so, dass er auf das Nexus passt, und benutze eine Tabelle, die ich geschrieben habe, um alle Werte in dimens.xml für die üblichen Breiten zu skalieren. Es ist ein Schmerz; Aber es funktioniert.
Wenn ich es nicht falsch verwende, ist das Android-System nur kaputt.
- 1. SP vs DP in Android TV
- 2. wie dip verwenden und in android
- 3. PHP oder Javascript, die ich verwenden sollte
- 4. Sollte ich Klassenvererbung verwenden oder nicht?
- 5. Sollte ich Pickle oder cPickle verwenden?
- 6. Sollte ich WPF-Konverter oder Trigger verwenden?
- 7. Sollte ich em oder px verwenden?
- 8. sollte ich "Set" oder "Liste" verwenden
- 9. Sollte ich Pylons oder Pyramid verwenden?
- 10. Sollte ich rand() oder rand_s() verwenden?
- 11. Sollte ich DirectInput oder Windows-Nachrichtenschleife verwenden?
- 12. Sollte ich ReAllocHGlobal oder FreeHGlobal/AllocHGlobal verwenden?
- 13. Sollte ich eval() oder call_user_func() verwenden?
- 14. Sollte ich SqlGeometry oder SqlGeography verwenden?
- 15. therubyracer oder nodejs, welche sollte ich verwenden?
- 16. Sollte ich Threads oder mehrere Prozesse verwenden?
- 17. Sollte ich Hostname oder IP-Adresse für mongodb Verbindungszeichenfolge verwenden
- 18. Sollte ich Long Long oder Int64_t für tragbaren Code verwenden?
- 19. Für Binärdateien sollte ich bfiles oder bigfiles verwenden?
- 20. Sollte ich process.nextTick oder setImmediate für asynchrone Iteration verwenden?
- 21. Sollte ich mb_ * oder iconv_ * Funktionen für Multibyte-Strings verwenden?
- 22. Sollte ich Typklassen verwenden oder nicht?
- 23. SP für Get ID oder Insert ID
- 24. Sollte ich IB oder Unterklasse verwenden UIView
- 25. Sollte ich Angular.copy() oder _.clone() verwenden?
- 26. Sollte ich tsd oder typings verwenden?
- 27. Sollte ich Interface Builder verwenden oder nicht?
- 28. Sollte ich hier wakeFromNib oder initWithCoder verwenden?
- 29. Sollte ich Int oder UInt16 verwenden?
- 30. Sollte ich Phobos oder Tango verwenden?
Definieren Sie Arbeit. Es wird an allen Droiden funktionieren.Es hängt nur davon ab, wie Sie es anzeigen möchten. – Falmarri