Como definir as margens para os botões de programação no Android?

votos
0

Tenho programaticamente adicionado mais de 50 botões em um GridLayout que contém ScrollView e LinearLayout como GridLayout Pais. Eu preciso definir as margens para cada botão. Tentei SetMargins () método. Mas, ele não funciona. Alguém pode me ajudar 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>

Código para criar botões.

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 19/12/2018 em 14:15
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Quando você adiciona o ponto de vista, é necessário adicioná-lo com o 2 parâmetro addView(View, LayoutParameters)versão. Caso contrário, você não obter os parâmetros que acabou de definir, você começa um novo objeto params. Além disso, você precisa mover a criação do objeto params dentro do loop, cada um deve ter o seu próprio, ou se você mudar isso você terá resultados estranhos (eles tinham toda a mudança).

Claro que você provavelmente deve estar usando um GridLayout ou RecyclerView com um GridLayoutManager em vez de adicionar pontos de vista, um por um, especialmente se você tiver mais de meia dúzia ou assim.

Respondeu 19/12/2018 em 14:42
fonte usuário

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