2011-05-18 12 views
16

Estoy tratando de establecer la altura de mi LinearLayout a 45 dip.LinearLayout.LayoutParams cómo usar dip ...?

¿Cómo puedo hacer esto al extender LinearLayout?

En este momento acabo de hacer: LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 45);

Respuesta

48

El mejor camino a seguir para este tipo de problema es crear un archivo dimens.xml bajo los valores y poner en sus valores de inmersión allí, y luego en el código que extraer las dimensiones de ese archivo. Para eso están los recursos, ¿verdad? =)

He aquí un ejemplo de un dimens.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="about_image_bottom">0dp</dimen> 
</resources> 

y es así como se puede tirar hacia fuera en código:

RelativeLayout.LayoutParams iv_params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
iv_params.setMargins(0, 0, 0, (int) getResources().getDimension(R.dimen.about_image_bottom)); 

Y a continuación, establece los parámetros a cualquier objeto que necesita , en mi caso a la ImageView iv:

iv.setLayoutParams(iv_params); 
+1

+1 buena solución Gix .. –

+0

Shou ldn't dimens.xml contiene dimen en dip en lugar de dp? Como dip es mucho más preciso ... – Salmaan

+0

dip == dp, si revisas la respuesta aquí, tienen toda la información sobre lo que significan las diferentes unidades de medida en Android http://stackoverflow.com/questions/2025282/difference -between-px-dp-dip-and-sp-in-android – Gix

-1

Probablemente la mejor manera sería especificar en XML. Vuelva a colocar la etiqueta LinearLayout normal, con lo que cada vez la clase que ha creado para extender el LinearLayout en la etiqueta XML:

<com.example.MyLinearLayout 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="45dp" 
       android:orientation="vertical" > 
.... 

Ver here para obtener más información.

16

Puede usar DisplayMatrics y determinar la densidad de la pantalla. Algo como esto:

int pixelsValue = 5; // margin in pixels 
float d = context.getResources().getDisplayMetrics().density; 
int margin = (int)(pixelsValue * d); 

creo que sirve ^^