¿Es posible establecer los Márgenes de LinearLayout, programáticamente pero no con píxeles, pero dp?Márgenes de LinearLayout, mediante programación con dp
Respuesta
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
Como recuerdo, es mejor usar pisos para compensaciones y redondeos para anchos.
que tenían el mismo problema y se utiliza esta técnica para resolverlo:
En primer lugar, he añadido un archivo XML para mis res/valores carpeta llamada dimensions.xml. Se ve así:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<dimen name="my_margin">5dip</dimen>
</resources>
En segundo lugar, en mi código, que tiene el equivalente de píxeles de ese margen de la siguiente manera (en cuenta que estoy usando Xamarin por lo que este es el código C#, pero la versión de Java puro debe ser muy similar):
int myMarginPx = Resources.GetDimensionPixelSize(Resource.Dimension.my_margin);
por último, creo mi params de Presentación:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent);
layoutParams.SetMargins(myMarginPx, myMarginPx, myMarginPx, myMarginPx);
Amigo, muchas gracias, Este código me ayuda. –
en forma de android java, debería ser como: 'int getDimenInt (Context context, @DimenRes int dimenRes) { return context.getResources(). GetDimensionPixelSize (dimenRes); } ' –
puede convertir a dp px, por ejemplo, convertir a 5 dp px:
Resources r = mContext.getResources();
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, r.getDisplayMetrics());
El siguiente método funciona para mí para convertir píxeles a dp:
int pixelToDP(int pixel) {
final float scale = RaditazApplication.getInstance().getResources().getDisplayMetrics().density;
return (int) ((pixel * scale) + 0.5f);
}
convertir DP al 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());
- 1. Establecer márgenes en LinearLayout programmatically
- 2. TextView y LinearLayout programación
- 3. Usar RelativeLayout dinámicamente y establecer márgenes en px, dp, inch, mm
- 4. centro de un LinearLayout y los márgenes "porcentaje"
- 5. LinearLayout, RelativeLayout, etc. los márgenes no funcionan como se esperaba
- 6. márgenes no trabaja
- 7. android peso de diseño mediante programación
- 8. Enlace mediante programación mediante marcador con navegador cruzado de Javascript
- 9. ¿Cómo ocultar una vista mediante programación?
- 10. Cómo agregar mediante programación vista en ViewFlipper
- 11. Cómo crear URLs mediante programación con AngularJS
- 12. Cómo interactuar con una aplicación mediante programación
- 13. Importar certificado con clave privada mediante programación
- 14. creando uiview mediante programación?
- 15. Deshabilitar mediante programación window.location.reload?
- 16. Enviar fax mediante programación con Java
- 17. Tratar de entender los márgenes en el interior de un LinearLayout ScrollView
- 18. Agregar PageControl mediante programación
- 19. Configuración del margen del botón mediante programación
- 20. Cómo agregar vistas a vistas mediante programación
- 21. ¿Consulta mediante programación MSDN?
- 22. Generar propiedades mediante programación
- 23. mediante programación en C#
- 24. Editando Web.config mediante programación
- 25. Cómo reiniciar mediante programación?
- 26. ImageBrush de cuadrícula mediante programación
- 27. La mejor manera de inflar la vista mediante programación
- 28. Crear mediante programación HTML5 Canvas
- 29. Cómo ejecutar NUnit mediante programación
- 30. ¿Cómo se lee el margen de ImageView mediante programación?
simplemente como un comentario: también puede utilizar TypedValue.applyDimensions(), pero parece que esta forma es mejor, ver http://stackoverflow.com/questions/2406449/does-setwidthint-pixels-use-dip-or-px/2406790#2406790 (Romain Guy es un ingeniero de Android) – bigstones
+1 - I Tengo un par de widgets que construí en código (sin usar XML), y solo puedes establecer píxeles allí. Tan pronto como especifiqué la versión SDK, mis diseños se volvieron locos. Utilicé esto para arreglarlos ... ¡Siempre use XML para diseños de Android! – tpow
Gran fragmento. De Verdad. –