tutorial studio programacion móviles interfaces formularios diseño desarrollo desarrollar curso aprende aplicaciones android layout android-layout

android - studio - Problema de diseño con margen de botón



interface android studio (3)

Al establecer layout_weight en los botones, los botones se expandirán sin tener espacio entre ellos. LinearLayout nunca agrega espacio entre sus vistas secundarias.

Debería envolver cada uno en un FrameLayout y usar layout_gravity="center" en sus botones, luego establecer layout_weight="1" en el FrameLayout .

<FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"> <Button android:layout_{width,height}="wrap_content" android:layout_gravity="center"/> </FrameLayout>

Tengo problemas con la organización del diseño en la aplicación de Android. Estoy creando botones dinámicamente y agregándolos con este código a mi diseño:

LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); for (int i = 0; i < NO_NUMBERS; i++){ Button btn = new Button(this); btn = (Button) layoutInflater.inflate(R.layout.button, null); btn.setId(2000+i); Integer randomNumber = sort.getNumbersCopy()[i]; btn.setText(randomNumber.toString()); btn.setOnClickListener((OnClickListener) this); buttonList.addView(btn); list.add(btn); }

Lo estoy agregando a LinearLayout:

<LinearLayout android:id="@+id/buttonlist" android:layout_alignParentLeft="true" android:layout_marginTop="185dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:orientation="horizontal" android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> </LinearLayout>

y estoy importando este .xml donde estoy definiendo el diseño del botón:

<Button xmlns:android="http://schemas.android.com/apk/res/android" android:textSize="26dp" android:textStyle ="bold" android:textColor="#ffffff" android:background="@drawable/button" android:layout_marginLeft="8px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"/>

Bueno, el diseño siempre termina así:

En lugar de algo como esto (incluso spce entre botones, botones cuadrados):

Para resumir esto: tengo que:

  • describe el botón en xml
  • generar dinámicamente los botones N
  • Añadir propiedades del botón descrito a las creadas dinámicamente.
  • organice el diseño para que pueda distribuir los botones de manera uniforme en la lista de botones con espacios entre ellos

Esto también funcionó incorporando TextView en un LinearLayout (vertical)

text_view.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Large Text" android:id="@+id/textView" android:layout_margin="10dp" android:textColor="@color/white"/> </LinearLayout>

Esto se integró en otra vista donde la vista raíz también es un LinerLayout. Una solución enrevesada ...


Recuerde, los atributos de android:layout_* son LayoutParams . Son argumentos para el padre y afectan cómo el padre realizará el diseño en esa vista. Estás especificando los atributos layout_margin en tus botones, pero se están ignorando. Este es el por qué:

Dado que los LayoutParams son específicos para el tipo de vista principal, debe proporcionar una instancia del tipo primario correcto cuando infle los diseños utilizando un LayoutInflater o, si layout_ atributos layout_ en la vista de nivel superior en el diseño se eliminarán. (El inflador no tendría idea de qué tipo de LayoutParams generar).

Ya que buttonList es su padre deseado para las vistas de botones, cambie su línea de inflate a esto:

btn = (Button) layoutInflater.inflate(R.layout.button, buttonList, false);