Estoy tratando de usar Java ( no XML ) para crear un diseño lineal con botones que llenan la pantalla y tienen márgenes. Aquí hay un código que funciona sin márgenes:
LinearLayout buttonsView = new LinearLayout(this);
buttonsView.setOrientation(LinearLayout.VERTICAL);
for (int r = 0; r < 6; ++r) {
Button btn = new Button(this);
btn.setText("A");
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); // Verbose!
lp.weight = 1.0f; // This is critical. Doesn't work without it.
buttonsView.addView(btn, lp);
}
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
setContentView(buttonsView, lp);
Eso funciona bien, pero ¿cómo demonios le das a los botones márgenes para que haya espacio entre ellos? Intenté usarlo LinearLayout.MarginLayoutParams
, pero eso no tiene weight
miembro, así que no es bueno. Y tampoco funciona si lo pasa lp
en su constructor.
¿Es esto imposible? Porque seguro que lo parece, y no sería la primera tarea de diseño de Android que solo puedes hacer en XML.
Respuestas:
Aquí hay un pequeño código para lograrlo:
fuente
Llama
setMargins()
elLinearLayout.LayoutParams
objeto.LinearLayout.LayoutParams
es una subclase deLinearLayout.MarginLayoutParams
, como se indica en el documentación .No.
Le invitamos a proporcionar prueba de este reclamo.
Personalmente, no conozco nada que solo se pueda lograr a través de XML y no a través de métodos Java en el SDK. De hecho, por definición, todo debe ser factible a través de Java (aunque no necesariamente a través de métodos alcanzables por SDK), ya que XML no es código ejecutable. Pero, si está al tanto de algo, indíquelo, porque es un error en el SDK que debería solucionarse algún día.
fuente
LayoutPararms
. Tengo términos de estilos ... sí, bueno, hay una razón por la que no los uso. :-)Para agregar márgenes directamente a los elementos (algunos elementos permiten la edición directa de los márgenes), puede hacer lo siguiente:
... esto funciona sin necesidad de saber / editar el diseño circundante. Tenga en cuenta la comprobación "instanceof" en caso de que intente ejecutar esto contra algo que no admite márgenes.
fuente
Debido a la variación en la densidad de píxeles de la pantalla del dispositivo, es bueno usar siempre la
DIP
unidad para establecer el margen mediante programación. Como abajo_Espero que esto ayude.
fuente
He configurado márgenes directamente usando el siguiente código
Lo único aquí es notar que
LayoutParams
debe importarse para el siguiente paqueteandroid.widget.RelativeLayout.LayoutParams
, o de lo contrario habrá un error.fuente
Prueba esto
fuente
fuente
Prueba esto:
fuente
debe tener en cuenta el tipo de viewGroup de la vista. En el código anterior, por ejemplo, quiero cambiar el margen de frameLayout, y el grupo de vista de frameLayout es RelativeLayout , por lo que debe convertirse a (RelativeLayout.LayoutParams)
fuente
Aquí una solución de línea única:
fuente