2010-06-17 13 views

Respuesta

40

Convierte como este

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

de aquí http://developer.android.com/guide/practices/screens_support.html#dips-pels

+1

otro enfoque simalar que utiliza un archivo de recursos http://stackoverflow.com/a/5369766/1815624 – CrandellWS

79

Sé que este tema es viejo y ya ha respondido, pero me gustaría sugerir también esta pieza de código:

int MY_DIP_VALUE = 5; //5dp 

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

Si su objeto Paint se utiliza para dibujar texto en un lienzo, puede dejar que el Canvas maneje el escalado por usted.

Al llamar a Canvas.drawText(), el tamaño del texto primero se determina por el objeto pasado en Paint, que se puede establecer a través de Paint.setTextSize(). El tamaño del texto se escala automáticamente por Canvas en función de la densidad del lienzo, que se puede encontrar en Canvas.getDensity().

Al ajustar el tamaño del texto en un objeto de pintura que será dibujado en la lona, ​​funciona con un valor unitario de dp o sp lienzo y dejar que controlan el escalado para usted.

+1

En 'Paint.setTextSize (flotar TEXTSIZE)' 'la textSize' es un valor de píxel. No me parece seguro que esto se escale automáticamente. Si lo hiciera, entonces pensaría que la documentación diría que las unidades son 'sp' o' dp' en lugar de píxeles. – Suragch

8

La respuesta aceptada es para gestos, no para establecer el tamaño del texto. La respuesta más alta (en el momento de escribir esto) está cerca, pero la documentación recomienda usar sp en lugar de dp porque además de escalarse para densidades de pantalla (como dp valores), sp también se escala según los tamaños de fuente preferidos por el usuario. La respuesta de @ pelotasplus solo funciona si obtiene el valor de los recursos.

Desde un int en el código

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

O, alternativamente

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

De los recursos

O si tiene el valor sp o dp de recursos:

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

con

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

Otros enlaces

Cuestiones relacionadas