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);