ich benutze eine Galaxie Registerkarte 1, 7 Zoll HDpi und eine Galaxie Registerkarte plus, 7 Zoll HDpi aber mehr Auflösung, und in meiner Anwendung kann der Text in Galaxien Registerkarte gut gelesen werden, aber in Galaxie Registerkarte Plus sind zu viel klein. Im verwendet sp in Schriftgröße und Layout groß. Irgendeine Idee? Vielen Dank
Dies sollte hilfreich sein, wenn Sie die Größe programmgesteuert einstellen möchten. Der Text wird auf jedem Gerät in der gleichen Größe angezeigt
TextView text = new TextView(this);
text.setText("text");
text.setTextSize(16 * getResources().getDisplayMetrics().density);
Bei den Hardwarespezifikationen handelt es sich beim Galaxy Tab 1 um ein MDPI-Gerät. Da Samsung jedoch Android 2.x verwendet, hat Samsung die HDPI-Ressourcen programmgesteuert eingestellt. So kann ich Ihnen raten, folgendes zu machen:
dimens.xml
im Verzeichnis values
.<dimen name="font_size">30sp</dimen>
. Dies ist die Standardschriftgröße.dimens.xml
im Verzeichnis values-large
.<dimen name="font_size">20sp</dimen>
. Dies ist die Schriftgröße für Registerkarte 1 der Galaxie.dimens.xml
im Verzeichnis values-sw600dp
.<dimen name="font_size">30sp</dimen>
. Dies ist die Schriftgröße für andere Tablets mit Android 3.x und neuer.Android:textSize="@dimens/font_size"
an.sie müssen nur verschiedene Ordner erstellen, die sich auf Dichte oder Bildschirmgröße beziehen
Option 1.
values-large
values-small
values-normal
Für weitere Erklärungen klicken Sie auf diesen Link ...
Unterstützung für mehrere Bildschirme
Option 2.
mTextView.setTextSize(16 * getResources().getDisplayMetrics().density);
dies ergibt TextSize abhängig von der Dichte.
(1) Ich denke, dass die Verwendung von "dp" oder "dip" für Text besser ist als die Verwendung von "sp", da dp (density pixel) sich an die Bildschirmdichte anpasst. Text wird daher bei Geräten mit hoher Dichte größer und bei Geräten mit geringer Dichte kleiner.
(2) OR Wenn Sie speziell für die Textgröße "sp" verwenden möchten, können Sie die Gerätedichte ermitteln und die Textgröße entsprechend festlegen:
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
switch(displayMetrics.densityDpi){
case DisplayMetrics.DENSITY_LOW:
//set text-size for low-density devices.
break;
case DisplayMetrics.DENSITY_MEDIUM:
//set text-size for medium-density devices.
break;
case DisplayMetrics.DENSITY_HIGH:
//set text-size for high-density devices.
break;
}
versuche dies:
so was
Android:textSize= "10sp"
sp
Skalenunabhängige Pixel - Dies ist wie bei der dp-Einheit, aber auch skaliert durch die Einstellung der Schriftgröße des Benutzers. Es wird empfohlen, .__ zu verwenden. Dieses Gerät bei der Angabe von Schriftgrößen, damit sie für .__ angepasst werden. sowohl die Bildschirmdichte als auch die Präferenz des Benutzers.
Mit dem folgenden Code wird die Skalierung der Schriftgröße in einer Textansicht unter Verwendung der Systemschriftgradeinstellung des Benutzers angepasst.
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getRealSize(size);
int screenWidth = size.x;
float fontscale = getResources().getConfiguration().fontScale;
float textSize = (screenWidth/ fontscale)/10;
Log.e(TAG, "textSize is: " + textSize);
yourTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
Sie können beliebige this dimensionen, die diesen Markt als verwenden, basierend auf der physischen Größe des Bildschirms verwenden. Dann haben Texte auf allen Geräten die gleiche physische Größe.
Besser andere Werte verwenden, bitte schauen Sie -
Unterschiedliche Werteordner in Android
für mehr schauen Sie sich das an
http://developer.Android.com/guide/topics/resources/more-resources.html#Dimension
Grundlagen geräteunabhängiger Pixel
OR
http://developer.Android.com/guide/practices/screens_support.html
TextView headerTextView (String-Bezeichnung) {
TextView headerTextView = new TextView(this.context);
float scale = context.getResources().getDisplayMetrics().density;
if(scale > 2.0) {
headerTextView.setWidth(210);
headerTextView.setHeight(120);
headerTextView.setTextSize(17);
}
else {
headerTextView.setWidth(125);
headerTextView.setHeight(60);
headerTextView.setTextSize(21);
}
Kurz gesagt, Sie können den skalierbaren DP und skalierbaren Font - Ansatz verwenden.
Die Android-Projektstruktur ermöglicht inhärent die Angabe unterschiedlicher Schriftgrößen (SP) und Randwerte (DP), indem sie in dimens.xml-Dateien für unterstützte Bildschirmgrößen definiert werden. Aber das Problem, das immer noch besteht, ist - welche Werte verwendet werden sollen? UX-Designer bieten normalerweise Style-Guides für nur einen Satz (z. B. 360 x 640 DP-Bildschirmgröße) und nicht für alle anderen unterstützten Bildschirmgrößen. Das Problem der Verwendung von richtigen Werten für andere unterstützte Bildschirmgrößen bleibt daher weiterhin unbeantwortet.
Eine gute Lösung (nach meinem Verständnis) ist die Verwendung von Readymade-skalierbaren Wörterbüchern für dimens.xml-Dateien. Dies ähnelt dem Verzeichnis der von this library bereitgestellten Dateien. Nachdem Sie diese XML-Dateien zum Projekt hinzugefügt haben, müssen Sie nur die Schlüssel in Ihren Layouts verwenden. Dann verwendet Android automatisch den Zeichensatz-/Randwert aus dem entsprechenden Verzeichnis. Bitte beziehen Sie sich auf hier für visuelle Unterschiede - mit und ohne diesen Ansatz.
für textSize schlug google vor, 'sp' anstelle von 'dp' .__ zu verwenden.
chcek diesen Link http://developer.Android.com/design/style/typography.html
für die Unterstützung der Schriftgröße für mehrere Bildschirme sollten Sie für jede Bildschirmgröße eine neue Ressource erstellen http://developer.Android.com/guide/topics/resources/more-resources.html#Dimension
TextView tv = neue TextView (Kontext); Tv.setText ("Hello World");
// Wert ist ein skaliertes Pixel (SP) Tv.setTextSize (TypedValue.COMPLEX_UNIT_SP, 20f);
// Wert ist geräteunabhängige Pixel (DIP) Tv.setTextSize (TypedValue.COMPLEX_UNIT_DIP, 20f);
// Wert ist Rohpixel (PX) Tv.setTextSize (TypedValue.COMPLEX_UNIT_PX, 20f);
// Wert ist in Punkten (PT) Tv.setTextSize (TypedValue.COMPLEX_UNIT_PT, 20f);
// Wert in Millimetern (MM) Tv.setTextSize (TypedValue.COMPLEX_UNIT_MM, 20f);
// Wert ist in Zoll (IN) Tv.setTextSize (TypedValue.COMPLEX_UNIT_IN, 20f);