So stellen Sie die Einheit für Paint.setTextSize() ein

Lesezeit: 5 Minuten

Benutzer-Avatar
Yverman

Ist es möglich, die Einheit zu ändern? Paint.setTextSize()? Soweit ich weiß, ist es Pixel, aber ich stelle die Textgröße gerne in DIP ein, um mehrere Bildschirme zu unterstützen.

Benutzer-Avatar
Felipe Caldas

Ich weiß, dass dieses Thema alt und bereits beantwortet ist, aber ich möchte auch diesen Code vorschlagen:

int MY_DIP_VALUE = 5; //5dp

int pixel= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                              MY_DIP_VALUE, getResources().getDisplayMetrics());

  • Textgröße sollte in SP sein, nicht in DP

    – Lukas Niessen

    20. Mai um 18:15 Uhr

Benutzer-Avatar
Alex Wolowoj

Konvertieren Sie es so

// The gesture threshold expressed in dip
private static final float GESTURE_THRESHOLD_DIP = 16.0f;

// Convert the dips to pixels
final float scale = getContext().getResources().getDisplayMetrics().density;
mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale + 0.5f);

// Use mGestureThreshold as a distance in pixels

von hier http://developer.android.com/guide/practices/screens_support.html#dips-pels

  • ein weiterer ähnlicher Ansatz, der eine Ressourcendatei verwendet stackoverflow.com/a/5369766/1815624

    – CrandellWS

    31. Januar 2016 um 14:07 Uhr


  • Wie hilft das überhaupt..?

    – james04

    4. April um 21:57 Uhr

Benutzer-Avatar
Suragch

Die akzeptierte Antwort bezieht sich auf Gesten, nicht auf die Einstellung der Textgröße. Die am höchsten bewertete Antwort (zum Zeitpunkt des Schreibens dieses Artikels) liegt nahe, aber die Dokumentation empfiehlt die Verwendung sp statt dp weil zusätzlich zur Skalierung für Bildschirmdichten (wie dp Werte sind), sp wird auch gemäß den vom Benutzer bevorzugten Schriftgrößen skaliert.

Von einem int in Code

int spSize = 17;
float scaledSizeInPixels = spSize * getResources().getDisplayMetrics().scaledDensity;
mTextPaint.setTextSize(scaledSizeInPixels);

Oder alternativ

int spSize = 17;
float scaledSizeInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
        spSize, getResources().getDisplayMetrics());
mTextPaint.setTextSize(scaledSizeInPixels);

Aus Ressourcen

Oder wenn Sie die haben sp oder dp Wert in Ressourcen:

<resources>
    <dimen name="fontSize">17sp</dimen>
</resources>

mit

float scaledSizeInPixels = getResources().getDimensionPixelSize(R.dimen.fontSize);
mTextPaint.setTextSize(scaledSizeInPixels);

Andere Verknüpfungen

  • Wie konvertiert man DP, PX, SP untereinander, insbesondere DP und SP?
  • Android: Canvas.drawText() Textgröße bei verschiedenen Bildschirmauflösungen
  • Paint.setTextSize
  • getDimensionPixelSize

  • Ich habe Ihre Vorschläge getestet, aber es gibt bei allen das gleiche Problem: Beispielsweise sieht die Schriftgröße 22 auf einem Pixel XL (1440 x 2560, 560 dpi) gut aus, aber auf einem Nexus One (480 x 800, hdpi = 240 dpi) ist sie winzig/nicht mehr lesbar. Jemand anderes hat dies vorgeschlagen, aber es bewirkt, dass dasselbe passiert. Es ist möglicherweise am besten, nur eine fest codierte Pixelgröße zu verwenden (z myPaint.setTextSize(80)), da der Text auf diese Weise auf jedem Gerät die gleiche reale Breite (z. B. 0,5″) hat (die Leinwand skaliert ihn!) – obwohl er offensichtlich nicht mit der Einstellung “Schriftgröße” von Android skaliert wird.

    – Neph

    14. Mai 2020 um 12:56 Uhr

  • @Neph, es ist schon eine Weile her, dass ich daran gearbeitet habe. Hat die Einstellung der dp Wert zu 80 geben das gleiche Ergebnis wie die Verwendung myPaint.setTextSize(80)?

    – Suragch

    15. Mai 2020 um 0:37 Uhr

  • Ich habe ehrlich gesagt nicht erwartet, nach all der Zeit eine Antwort zu bekommen, also danke dafür! Sie meinen, verwenden Sie ` 17sp` mit dp Anstatt von sp? Ich habe es gerade mit getestet dp auch, aber ich bekomme das gleiche Ergebnis für beide: 22sp/22dp gib mir ca. das gleiche Ergebnis wie myPaint.setTextSize(80) – zumindest beim größeren Pixel XL. Auf dem kleineren Nexus One ist der Text viel zu klein, um lesbar zu sein.

    – Neph

    15. Mai 2020 um 9:37 Uhr

  • Ok, ich bin mir nicht sicher, was dann los ist, aber danke für den Kommentar.

    – Suragch

    15. Mai 2020 um 11:28 Uhr

Und hier ist eine noch kürzere Methode zum Konvertieren von dp-s in px-els unter Berücksichtigung von Anzeigemetriken

https://developer.android.com/reference/android/content/res/Resources.html#getDimensionPixelSize(int)

Wenn Ihr Paint-Objekt zum Zeichnen von Text auf einer Leinwand verwendet wird, können Sie die Skalierung der Leinwand überlassen.

Beim Anrufen Canvas.drawText() Die Textgröße wird zunächst durch die übergebenen bestimmt Paint Objekt, das über gesetzt werden kann Paint.setTextSize(). Die Textgröße wird automatisch skaliert Canvas basierend auf der Leinwanddichte, die mit gefunden werden kann Canvas.getDensity().

Wenn Sie die Textgröße auf einem Malobjekt festlegen, das auf Canvas gezeichnet wird, arbeiten Sie mit einem Einheitswert von dp oder sp und lassen Sie Canvas die Skalierung für Sie übernehmen.

  • Im Paint.setTextSize(float textSize) das textSize ist ein Pixelwert. Es scheint mir nicht sicher, dass dies automatisch skaliert wird. Wenn dies der Fall wäre, würde die Dokumentation sagen, dass die Einheiten sind sp oder dp statt Pixel.

    – Suragch

    6. Februar 2017 um 9:37 Uhr

  • Meine App setzt eine Kartenmarkierung mit Canvas.drawText(). Ich habe verschiedene Lösungen getestet, aber Vorschläge mögen getDimensionPixelSize(R.dimen.fontSize) funktionieren nicht richtig: <dimen name="fontSize">22sp</dimen> sieht gut aus auf einem Pixel XL (1440×2560, 560dpi), auf einem Nexus 4 (768×1280, xhdpi=320dpi) ist es merklich kleiner, aber auf einem Nexus One (480×800, hdpi=240dpi) ist es winzig/nicht mehr lesbar. TextViews werden automatisch skaliert, aber die Leinwand übernimmt auch bestimmte Skalierungen: Sie reagiert nicht auf Änderungen in den Schriftarteinstellungen von Android, stellt aber sicher, dass der Text auf jedem Gerät dieselbe Größe hat (z. B. 0,5 Zoll breit).

    – Neph

    14. Mai 2020 um 12:03 Uhr

  • Im Paint.setTextSize(float textSize) das textSize ist ein Pixelwert. Es scheint mir nicht sicher, dass dies automatisch skaliert wird. Wenn dies der Fall wäre, würde die Dokumentation sagen, dass die Einheiten sind sp oder dp statt Pixel.

    – Suragch

    6. Februar 2017 um 9:37 Uhr

  • Meine App setzt eine Kartenmarkierung mit Canvas.drawText(). Ich habe verschiedene Lösungen getestet, aber Vorschläge mögen getDimensionPixelSize(R.dimen.fontSize) funktionieren nicht richtig: <dimen name="fontSize">22sp</dimen> sieht gut aus auf einem Pixel XL (1440×2560, 560dpi), auf einem Nexus 4 (768×1280, xhdpi=320dpi) ist es merklich kleiner, aber auf einem Nexus One (480×800, hdpi=240dpi) ist es winzig/nicht mehr lesbar. TextViews werden automatisch skaliert, aber die Leinwand übernimmt auch bestimmte Skalierungen: Sie reagiert nicht auf Änderungen in den Schriftarteinstellungen von Android, stellt aber sicher, dass der Text auf jedem Gerät dieselbe Größe hat (z. B. 0,5 Zoll breit).

    – Neph

    14. Mai 2020 um 12:03 Uhr

1131040cookie-checkSo stellen Sie die Einheit für Paint.setTextSize() ein

So stellen Sie die Einheit für Paint.setTextSize() ein

Lesezeit: 5 Minuten

Benutzer-Avatar
Yverman

Ist es möglich, die Einheit zu ändern? Paint.setTextSize()? Soweit ich weiß, ist es Pixel, aber ich stelle die Textgröße gerne in DIP ein, um mehrere Bildschirme zu unterstützen.

Benutzer-Avatar
Felipe Caldas

Ich weiß, dass dieses Thema alt und bereits beantwortet ist, aber ich möchte auch diesen Code vorschlagen:

int MY_DIP_VALUE = 5; //5dp

int pixel= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                              MY_DIP_VALUE, getResources().getDisplayMetrics());

  • Textgröße sollte in SP sein, nicht in DP

    – Lukas Niessen

    20. Mai um 18:15 Uhr

Benutzer-Avatar
Alex Wolowoj

Konvertieren Sie es so

// The gesture threshold expressed in dip
private static final float GESTURE_THRESHOLD_DIP = 16.0f;

// Convert the dips to pixels
final float scale = getContext().getResources().getDisplayMetrics().density;
mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale + 0.5f);

// Use mGestureThreshold as a distance in pixels

von hier http://developer.android.com/guide/practices/screens_support.html#dips-pels

  • ein weiterer ähnlicher Ansatz, der eine Ressourcendatei verwendet stackoverflow.com/a/5369766/1815624

    – CrandellWS

    31. Januar 2016 um 14:07 Uhr


  • Wie hilft das überhaupt..?

    – james04

    4. April um 21:57 Uhr

Benutzer-Avatar
Suragch

Die akzeptierte Antwort bezieht sich auf Gesten, nicht auf die Einstellung der Textgröße. Die am höchsten bewertete Antwort (zum Zeitpunkt des Schreibens dieses Artikels) liegt nahe, aber die Dokumentation empfiehlt die Verwendung sp statt dp weil zusätzlich zur Skalierung für Bildschirmdichten (wie dp Werte sind), sp wird auch gemäß den vom Benutzer bevorzugten Schriftgrößen skaliert.

Von einem int in Code

int spSize = 17;
float scaledSizeInPixels = spSize * getResources().getDisplayMetrics().scaledDensity;
mTextPaint.setTextSize(scaledSizeInPixels);

Oder alternativ

int spSize = 17;
float scaledSizeInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
        spSize, getResources().getDisplayMetrics());
mTextPaint.setTextSize(scaledSizeInPixels);

Aus Ressourcen

Oder wenn Sie die haben sp oder dp Wert in Ressourcen:

<resources>
    <dimen name="fontSize">17sp</dimen>
</resources>

mit

float scaledSizeInPixels = getResources().getDimensionPixelSize(R.dimen.fontSize);
mTextPaint.setTextSize(scaledSizeInPixels);

Andere Verknüpfungen

  • Wie konvertiert man DP, PX, SP untereinander, insbesondere DP und SP?
  • Android: Canvas.drawText() Textgröße bei verschiedenen Bildschirmauflösungen
  • Paint.setTextSize
  • getDimensionPixelSize

  • Ich habe Ihre Vorschläge getestet, aber es gibt bei allen das gleiche Problem: Beispielsweise sieht die Schriftgröße 22 auf einem Pixel XL (1440 x 2560, 560 dpi) gut aus, aber auf einem Nexus One (480 x 800, hdpi = 240 dpi) ist sie winzig/nicht mehr lesbar. Jemand anderes hat dies vorgeschlagen, aber es bewirkt, dass dasselbe passiert. Es ist möglicherweise am besten, nur eine fest codierte Pixelgröße zu verwenden (z myPaint.setTextSize(80)), da der Text auf diese Weise auf jedem Gerät die gleiche reale Breite (z. B. 0,5″) hat (die Leinwand skaliert ihn!) – obwohl er offensichtlich nicht mit der Einstellung “Schriftgröße” von Android skaliert wird.

    – Neph

    14. Mai 2020 um 12:56 Uhr

  • @Neph, es ist schon eine Weile her, dass ich daran gearbeitet habe. Hat die Einstellung der dp Wert zu 80 geben das gleiche Ergebnis wie die Verwendung myPaint.setTextSize(80)?

    – Suragch

    15. Mai 2020 um 0:37 Uhr

  • Ich habe ehrlich gesagt nicht erwartet, nach all der Zeit eine Antwort zu bekommen, also danke dafür! Sie meinen, verwenden Sie ` 17sp` mit dp Anstatt von sp? Ich habe es gerade mit getestet dp auch, aber ich bekomme das gleiche Ergebnis für beide: 22sp/22dp gib mir ca. das gleiche Ergebnis wie myPaint.setTextSize(80) – zumindest beim größeren Pixel XL. Auf dem kleineren Nexus One ist der Text viel zu klein, um lesbar zu sein.

    – Neph

    15. Mai 2020 um 9:37 Uhr

  • Ok, ich bin mir nicht sicher, was dann los ist, aber danke für den Kommentar.

    – Suragch

    15. Mai 2020 um 11:28 Uhr

Und hier ist eine noch kürzere Methode zum Konvertieren von dp-s in px-els unter Berücksichtigung von Anzeigemetriken

https://developer.android.com/reference/android/content/res/Resources.html#getDimensionPixelSize(int)

Wenn Ihr Paint-Objekt zum Zeichnen von Text auf einer Leinwand verwendet wird, können Sie die Skalierung der Leinwand überlassen.

Beim Anrufen Canvas.drawText() Die Textgröße wird zunächst durch die übergebenen bestimmt Paint Objekt, das über gesetzt werden kann Paint.setTextSize(). Die Textgröße wird automatisch skaliert Canvas basierend auf der Leinwanddichte, die mit gefunden werden kann Canvas.getDensity().

Wenn Sie die Textgröße auf einem Malobjekt festlegen, das auf Canvas gezeichnet wird, arbeiten Sie mit einem Einheitswert von dp oder sp und lassen Sie Canvas die Skalierung für Sie übernehmen.

  • Im Paint.setTextSize(float textSize) das textSize ist ein Pixelwert. Es scheint mir nicht sicher, dass dies automatisch skaliert wird. Wenn dies der Fall wäre, würde die Dokumentation sagen, dass die Einheiten sind sp oder dp statt Pixel.

    – Suragch

    6. Februar 2017 um 9:37 Uhr

  • Meine App setzt eine Kartenmarkierung mit Canvas.drawText(). Ich habe verschiedene Lösungen getestet, aber Vorschläge mögen getDimensionPixelSize(R.dimen.fontSize) funktionieren nicht richtig: <dimen name="fontSize">22sp</dimen> sieht gut aus auf einem Pixel XL (1440×2560, 560dpi), auf einem Nexus 4 (768×1280, xhdpi=320dpi) ist es merklich kleiner, aber auf einem Nexus One (480×800, hdpi=240dpi) ist es winzig/nicht mehr lesbar. TextViews werden automatisch skaliert, aber die Leinwand übernimmt auch bestimmte Skalierungen: Sie reagiert nicht auf Änderungen in den Schriftarteinstellungen von Android, stellt aber sicher, dass der Text auf jedem Gerät dieselbe Größe hat (z. B. 0,5 Zoll breit).

    – Neph

    14. Mai 2020 um 12:03 Uhr

  • Im Paint.setTextSize(float textSize) das textSize ist ein Pixelwert. Es scheint mir nicht sicher, dass dies automatisch skaliert wird. Wenn dies der Fall wäre, würde die Dokumentation sagen, dass die Einheiten sind sp oder dp statt Pixel.

    – Suragch

    6. Februar 2017 um 9:37 Uhr

  • Meine App setzt eine Kartenmarkierung mit Canvas.drawText(). Ich habe verschiedene Lösungen getestet, aber Vorschläge mögen getDimensionPixelSize(R.dimen.fontSize) funktionieren nicht richtig: <dimen name="fontSize">22sp</dimen> sieht gut aus auf einem Pixel XL (1440×2560, 560dpi), auf einem Nexus 4 (768×1280, xhdpi=320dpi) ist es merklich kleiner, aber auf einem Nexus One (480×800, hdpi=240dpi) ist es winzig/nicht mehr lesbar. TextViews werden automatisch skaliert, aber die Leinwand übernimmt auch bestimmte Skalierungen: Sie reagiert nicht auf Änderungen in den Schriftarteinstellungen von Android, stellt aber sicher, dass der Text auf jedem Gerät dieselbe Größe hat (z. B. 0,5 Zoll breit).

    – Neph

    14. Mai 2020 um 12:03 Uhr

1131050cookie-checkSo stellen Sie die Einheit für Paint.setTextSize() ein

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy