Cómo definir los márgenes para los botones de programación en Android?

votos
0

He añadido mediante programación más de 50 botones en un GridLayout que contiene ScrollView y LinearLayout como GridLayout padres. Necesito fijar los márgenes para cada botón. Probé SetMargins método (). Sin embargo, esto no funciona. ¿Alguien puede ayudarme por favor?

XML

<LinearLayout
        android:layout_width=match_parent
        android:layout_height=match_parent
        android:orientation=vertical
        android:padding=10dp
        android:layout_marginBottom=10dp>

        <ScrollView
            android:layout_width=match_parent
            android:layout_height=match_parent
            android:scrollbars=none>

            <GridLayout
                android:id=@+id/levelsGridLayout
                android:layout_width=match_parent
                android:layout_height=match_parent
                android:columnCount=5
                android:rowCount=10>


            </GridLayout>

        </ScrollView>

    </LinearLayout>

El código para crear botones.

FrameLayout.LayoutParams params = FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.WRAP_CONTENT,
            FrameLayout.LayoutParams.WRAP_CONTENT
    );
    for (int i = 1; i <= 100; i++) {
        Button button = new Button(this);
        button.setText(Integer.toString(i));
        id = getResources().getIdentifier(button + i, id, getPackageName());
        button.setId(id);
        button.setTag(Integer.toString(i));
        button.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
        button.setTextColor(Color.WHITE);
        button.setBackgroundResource(R.drawable.levels_button_background);
        params.setMargins(5, 5, 5, 5);
        button.setLayoutParams(params);
        allLevelButtons.add(button);
        levelsGridLayout.addView(button);
        button.getLayoutParams().width = oneButtonWidth;
    }
Publicado el 19/12/2018 a las 14:15
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Cuando se agrega el punto de vista, es necesario agregar que con el parámetro 2 addView(View, LayoutParameters)de versión. De lo contrario, no consigue los parametros que acaba de establecer, se obtiene un nuevo objeto params. Además, es necesario para mover la creación del objeto params dentro del bucle, cada uno debe tener su propia cuenta, o si alguna vez cambia él se puede obtener resultados extraños (todos ellos habían cambio).

Por supuesto que probablemente debería utilizar un GridLayout o RecyclerView con un GridLayoutManager en lugar de añadir puntos de vista, uno por uno, especialmente si usted tiene más de media docena o así.

Respondida el 19/12/2018 a las 14:42
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more