2010-07-23 9 views
33

Básicamente tengo este XML interno, pero tengo que volver a crearlo dentro de un código. ¿Cómo lo hago?¿Cómo configuro el diseño y el tamaño de texto para DP dentro del programa?

<EditText 
     android:layout_width="140dp" 
     android:layout_height="20dp" 
     android:background="@drawable/input_bg01" 
     android:textSize="10dp" 
     android:gravity="center" 
     android:text="111-222-333  FOOO" /> 

Puedo usar esto para establecer el tamaño del texto, pero ¿qué pasa con la distribución del ancho y la altura?

edTxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10); 

¿Hay alguna manera de decirle al código que use una unidad DP en lugar de un píxel? ¿O una función de conversión para convertir DP en píxel?

Respuesta

45

Resuelto here.

Extracto:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); 
float dp = 20f; 
float fpixels = metrics.density * dp; 
int pixels = (int) (fpixels + 0.5f); 
72

que puede utilizar:

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics()); 

Ahora el valor de pixels es equivalente a 10dp en la densidad actual de la pantalla del dispositivo. El TypedValue contiene otros métodos similares que ayudan en la conversión.

3

simplemente para la corrección: Se da otra solución (que yo prefiero) para la pregunta here

setTextSize(float) espera un valor de píxel reducido. Entonces, setTextSize(10) le daría el resultado deseado. Sin embargo, getDimension() y getDimensionPixelSize() devuelven el tamaño en unidades de píxeles.

Así, por tu ejemplo sería

setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.edTxt_text_size)); 

donde <dimen name="edtxt_text_size">10dp</dimen> se encuentra en su archivo dimens.xml por ejemplo.

Cuestiones relacionadas