2010-11-23 12 views
2

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?

+1

Definieren Sie Arbeit. Es wird an allen Droiden funktionieren.Es hängt nur davon ab, wie Sie es anzeigen möchten. – Falmarri

Antwort

6

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.

3

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

0

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.