Definieren der Textgröße für Canvas.drawText () in res / values ​​/ dimens.xml

8

In einer Scrabble-ähnlichen Wortspiel-App versuche ich, schwarze Buchstaben und Werte zu zeichnen auf gelben Fliesen.

Das funktioniert bei Android-Emulatoren unter Windows und Mac:

Dies funktioniert nicht (die Textgröße ist zu groß) auf realen Geräten wie Moto G, Nexus 1 und 4:

Ich definiere die Textgrößen von 60sp und 20sp (ich habe versucht, dp ) in res / values /dimens.xml :

%Vor%

Und dann benutze sie in meinem BigTile.java Klasse:

%Vor%

Was mache ich falsch?

    
Alexander Farber 07.11.2014, 16:55
quelle

4 Antworten

5

Wenn Sie einen Wert von R.dimen.etwas in Pixel umwandeln möchten:

%Vor%

Wenn Sie einen manuellen Wert oder etwas Ähnliches liefern möchten:

%Vor%     
TacB0sS 13.11.2014 14:30
quelle
2

Eine Sache, die Ihnen in den Sinn kommt, ist, dass Sie sp -Werte verwenden, die von den Benutzereinstellungen in den Einstellungen / Anzeige / Schriftgröße abhängen. Können Sie überprüfen, ob die Einstellung wie Large oder so ist - dies würde eine zusätzliche Skalierung Ihrer Schriftgröße zur Folge haben. Auch glaube ich, dass für 2.x-Geräte die Standardeinstellung anders ist als für 4.x-Geräte (nicht sicher).

Sie könnten versuchen, dp -Werte zu verwenden und zu sehen, ob das einen Unterschied macht.

    
Flo 13.11.2014 23:52
quelle
2

Das Problem besteht darin, dass setTextSize den Größenwert in SP und nicht in Pixel erhält. In Ihrem Fall konvertiert getDimensionPixelSize sp in Pixel, und setTextSize behandelt die Pixel dann als sp und skaliert erneut.

  

public void setTextSize (Gleitkommagröße)

     

Legen Sie die Standardtextgröße auf den angegebenen Wert fest, der als "skaliert" interpretiert wird   Pixel "Einheiten. Diese Größe wird basierend auf der aktuellen Dichte und angepasst   Präferenz der Benutzerschriftgröße.

Um dies zu beheben, können Sie

anrufen %Vor%     
yoah 15.11.2014 19:22
quelle
1

Die Verwendung von dp für die Textgrößen ist definitiv der richtige Weg, wenn Sie nicht möchten, dass die Schriftgröße des Benutzers manuell angepasst wird, indem Sie auch Ihre Bilder skalieren.

Ihr Problem besteht darin, dass Ihr big_tile image in den mdpi (128x128) und xxhdpi (256x256) Varianten inkonsistente Größen hat: xxhdpi sollte die dreifache Auflösung von mdpi haben, aber Ihr Bild ist nur 2x die Größe, was es effektiv macht ~ 85dp statt 128dp.

Ich bin mir ziemlich sicher, dass ich Android Lint vor solchen Dingen gewarnt habe, versuche es in deinem Projekt.

    
Karsten 29.01.2015 03:43
quelle