Eenheid instellen voor Paint.setTextSize()

Is het mogelijk om de eenheid voor Paint.setTextSize()te wijzigen? Voor zover ik weet, is het pixel, maar ik stel graag de tekstgrootte in DIP in voor ondersteuning van meerdere schermen.


Antwoord 1, autoriteit 100%

Ik weet dat dit onderwerp oud is en al beantwoord is, maar ik zou ook dit stukje code willen voorstellen:

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

Antwoord 2, autoriteit 56%

Converteer het zo

// 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

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


Antwoord 3, autoriteit 39%

Het geaccepteerde antwoord is voor gebaren, niet voor het instellen van de tekstgrootte. Het hoogst gestemde antwoord (op het moment van schrijven) is dichtbij, maar de documentatie beveelt aan om spte gebruiken in plaats van dpomdat het niet alleen wordt geschaald voor schermdichtheden (zoals dpwaarden zijn), wordt spook geschaald volgens de door de gebruiker gewenste lettergroottes.

Van een intin code

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

Of anders

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

Van bronnen

Of als u de waarde spof dpin bronnen heeft:

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

met

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

Andere links


Antwoord 4, autoriteit 4%

En hier is nog een kortere methode om dp-s naar px-els te converteren, rekening houdend met weergavestatistieken

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


Antwoord 5, autoriteit 4%

Als je Paint-object wordt gebruikt om tekst op een canvas te tekenen, kun je het canvas de schaalverdeling voor je laten regelen.

Bij het aanroepen van Canvas.drawText()de tekstgrootte wordt eerst bepaald door het doorgegeven in Paintobject, dat kan worden ingesteld via Paint.setTextSize(). De tekstgrootte wordt automatisch geschaald door Canvasop basis van de canvasdichtheid, die kan worden gevonden met Canvas.getDensity().

Als je de tekstgrootte instelt op een verfobject dat op Canvas wordt getekend, werk dan met een eenheidswaarde van dpof spen laat Canvas de schaal voor u.

Other episodes