如何在Android中以编程方式设置按钮的边距?

时间:2018-12-19 14:15:24

标签: android

我已在GridLayout中以编程方式添加了50多个按钮,其中ScrollView和LinearLayout作为GridLayout Parents。我需要为每个按钮设置边距。我尝试了setMargins()方法。但是,它不起作用。谁能帮我吗?

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>

创建按钮的代码。

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

1 个答案:

答案 0 :(得分:0)

添加视图时,需要使用2参数addView(View, LayoutParameters)版本添加它。否则,您不会获得刚刚设置的参数,而是会获得一个新的params对象。另外,您需要在循环内移动params对象的创建,每个对象都应该有自己的对象,或者,如果更改它,您将得到怪异的结果(它们都将改变)。

当然,您可能应该将GridLayout或RecyclerView与GridLayoutManager一起使用,而不是一个一个地添加视图,特别是如果您的视图多于六个的话。