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 sp
te gebruiken in plaats van dp
omdat het niet alleen wordt geschaald voor schermdichtheden (zoals dp
waarden zijn), wordt sp
ook geschaald volgens de door de gebruiker gewenste lettergroottes.
Van een int
in 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 sp
of dp
in bronnen heeft:
<resources>
<dimen name="fontSize">17sp</dimen>
</resources>
met
float scaledSizeInPixels = getResources().getDimensionPixelSize(R.dimen.fontSize);
mTextPaint.setTextSize(scaledSizeInPixels);
Andere links
- Converteren DP, PX, SP onder elkaar, vooral DP en SP?
- Android: Canvas.drawText() tekstgrootte op verschillende schermresoluties
Paint.setTextSize
getDimensionPixelSize
Antwoord 4, autoriteit 4%
En hier is nog een kortere methode om dp-s naar px-els te converteren, rekening houdend met weergavestatistieken
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 Paint
object, dat kan worden ingesteld via Paint.setTextSize()
. De tekstgrootte wordt automatisch geschaald door Canvas
op 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 dp
of sp
en laat Canvas de schaal voor u.