Jak ustawić marginesy dla przycisków programowo w Android?

głosy
0

Mam programowo dodane ponad 50 przycisków w GridLayout który zawiera Scrollview i LinearLayout jako GridLayout rodziców. Muszę ustawić marginesy dla każdego przycisku. Próbowałem setMargins metoda (). Ale to nie działa. Może ktoś proszę mi pomóc?

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>

Kod do tworzenia przycisków.

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;
    }
Utwórz 19/12/2018 o 14:15
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Po dodaniu widoku, należy dodać go z 2 parametru addView(View, LayoutParameters)wersji. W przeciwnym razie nie dostaniesz params po prostu ustawione, pojawi się nowy params obiekt. Ponadto, trzeba przenieść utworzenie obiektu params wewnątrz pętli, każdy z nich powinien dostać własną rękę, lub jeśli kiedykolwiek go zmienić dostaniesz dziwne rezultaty (oni, że wszystko się zmienia).

Oczywiście należy prawdopodobnie używając GridLayout lub RecyclerView z GridLayoutManager zamiast dodawania wyświetleń jeden po drugim, zwłaszcza jeśli masz więcej niż pół tuzina.

Odpowiedział 19/12/2018 o 14:42
źródło użytkownik

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