Voglio disegnare il testo con un'altezza specifica (in pixel) su una vista usando Canvas
. Puoi semplicemente usare Paint.setTextSize(float)
con il numero di pixel o usando dp
o sp
?Quale unità di misura usa Paint.setTextSize (float)?
risposta
utilizza pixel, ma è possibile convertirlo in dp utilizzando questo codice:
double getDPFromPixels(double pixels) {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch(metrics.densityDpi){
case DisplayMetrics.DENSITY_LOW:
pixels = pixels * 0.75;
break;
case DisplayMetrics.DENSITY_MEDIUM:
//pixels = pixels * 1;
break;
case DisplayMetrics.DENSITY_HIGH:
pixels = pixels * 1.5;
break;
}
return pixels;
}
Questi metodi includono DisplayMetrics
che può essere aggiunto in futuro Android SDK.
Pixel immergere:
public static float getDipFromPixels(float px) {
return TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_PX,
px,
Resources.getSystem().getDisplayMetrics()
);
}
Dip ai pixel:
public static float getPixelsFromDip(float dip) {
return TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dip,
Resources.getSystem().getDisplayMetrics()
);
}
Il modo più semplice per ottenere un valore px per tali metodi è quello di definire semplicemente la dp appropriato o valore sp nelle dimens file .xml e recuperarlo in questo modo:
int sizeInPx = context.getResources().getDimensionPixelSize(R.dimen.sizeInSp);
In realtà sono disponibili 3 metodi da utilizzare in base a le tue esigenze:
getDimension()
Restituisce un float in pixel.getDimensionPixelSize()
Restituisce un pixel int. È uguale a getDimension(), tranne che il valore restituito viene ARROTOLATO al valore intero più vicino e garantisce che un valore di input diverso da zero produca un valore di output diverso da zero (ad esempio, 0.1 viene restituito come 1, non 0).getDimensionPixelOffset()
Restituisce un int in pixel. Questo è lo stesso di getDimension(), ad eccezione del fatto che il valore restituito è TRONCATO (cioè arrotondato per difetto). Il risultato potrebbe essere zero.
Questa è la migliore risposta; funziona correttamente su tutti i dispositivi esistenti e continuerà a funzionare su dispositivi futuri (la risposta di Todd Davies non ha le densità più recenti come xhdpi, xxhdpi e così via). Questo è anche più flessibile è possibile fornire un file dimens.xml alternativo per diverse dimensioni dello schermo (tablet, ecc.) O passare da dp a sp secondo necessità. – NaxyMatt
Sì, questa risposta di TheIT è la migliore risposta come dice WanderingLinguist, perché la soluzione di Todd Davies dovrebbe essere aggiornata per includere anche xHigh, xxhigh e xxxhigh e tv casi e mai casi in futuro che mostrino che è complicato e sarà facilmente risolto, della risposta di TheIT che funzionerà ora e in futuro anche se i dispositivi verranno mai e la soluzione funziona come Android è stato progettato per gestire la densità di tutti i dispositivi re. –
- 1. Quale unità di misura usa Paint.setStrokeWidth()?
- 2. Come vengono rappresentate le unità di misura?
- 3. F # Unità di misura, Casting senza perdere il tipo di misura
- 4. Le unità di misura devono essere localizzate?
- 5. Uso dei tipi C# per esprimere le unità di misura
- 6. Quale unità di misura viene utilizzata per determinare la precisione del GPS con l'API geo HTML5?
- 7. Unità di misura per la colonna Durata in SQL Profiler
- 8. Quale pacchetto usa Python?
- 9. Quale porta usa httpclient?
- 10. usa il doppio più veloce del float?
- 11. Quale unità di tempo restituisce il tempo?
- 12. Copertura del codice di misura in Delphi
- 13. Qual è l'unità di misura in Xcode
- 14. Quale lingua usa l'estensione .pde?
- 15. Scopri quale carattere usa matplotlib
- 16. Quale controllo ortografico usa gedit?
- 17. Scoprire quale compilatore Maven usa
- 18. Quale codifica usa std :: string.c_str()?
- 19. Quale stringa di formato visualizza il float così com'è?
- 20. F # Unità di misura con simboli di caratteri Unicode, qual è la restrizione esatta?
- 21. Mostra due unità di misura sui segni di graduazione degli assi in ggplot2
- 22. Quale porta usa un determinato programma?
- 23. Quale settore dell'industria del software usa C++?
- 24. Quale regola usa "regola" o "prova"?
- 25. quale lingua usa google e gli altri
- 26. Capire quale gemma Rails App non usa
- 27. Css problema altezza div quando si usa float
- 28. Accesso nomi delle unità "Sistema di misura" (kg/lb, m/a, ecc) in C#
- 29. Come posso interrompere Sass aggiungendo spazi prima delle unità di misura?
- 30. Unità generiche f # su tipi generici
Grazie per aver risposto così in fretta. – marzipankaiser
@Todd Davies: come posso usarlo all'interno di una classe View personalizzata? Non è possibile utilizzare getWindowManager() – Neil
@Neil - È possibile utilizzare il metodo View 'getContext()' per ottenere il 'Contesto', dopodiché è possibile chiamare' Context.getSystemService (Context.WINDOW_SERVICE) 'per ottenere' WindowManager'. Maggiori informazioni su questo qui http://developer.android.com/reference/android/view/WindowManager.html. – Tzoiker