tutorial studio poner objetos linearlayout layouts gridlayout elementos ejemplo como botones amontonados android

android - studio - Márgenes de un LinearLayout, mediante programación con dp



layout en android (5)

¿Es posible establecer los márgenes de un LinearLayout, programáticamente pero no con píxeles, pero dp?


El siguiente método me funciona para convertir píxeles a dp:

int pixelToDP(int pixel) { final float scale = RaditazApplication.getInstance().getResources().getDisplayMetrics().density; return (int) ((pixel * scale) + 0.5f); }


Puede convertir dp a px, por ejemplo, convertir 5dp a px:

Resources r = mContext.getResources(); int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, r.getDisplayMetrics());


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

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

Según recuerdo, es mejor usar pisos para compensaciones y redondeos para anchos.


Tuve el mismo problema y usé esta técnica para resolverlo:

Primero, agregué un archivo xml a mi carpeta res / values ​​llamada dimensions.xml. Se parece a esto:

<?xml version="1.0" encoding="utf-8" ?> <resources> <dimen name="my_margin">5dip</dimen> </resources>

Segundo, en mi código, obtuve el equivalente en píxeles de ese margen de la siguiente manera (nota que estoy usando Xamarin, así que este es el código C #, pero la versión pura de Java debería ser muy similar):

int myMarginPx = Resources.GetDimensionPixelSize(Resource.Dimension.my_margin);

Finalmente, creo mis parámetros de diseño:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent); layoutParams.SetMargins(myMarginPx, myMarginPx, myMarginPx, myMarginPx);


convertir DP en valor de píxel

int Whatever_valueInDP=10;//value in dp int Value_In_Pixel= (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, Whatever_valueInDP, getResources() .getDisplayMetrics());