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

Posted

技术标签:

【中文标题】如何在 Android 中以编程方式设置按钮的边距?【英文标题】:How to set Margins for buttons Programmatically in Android? 【发布时间】:2019-05-20 01:20:13 【问题描述】:

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

XML

<LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:padding="10dp"
        android:layout_marginBottom="10dp">

        <ScrollView
            android:layout_
            android:layout_
            android:scrollbars="none">

            <GridLayout
                android:id="@+id/levelsGridLayout"
                android:layout_
                android:layout_
                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】:

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

当然,您可能应该将 GridLayout 或 RecyclerView 与 GridLayoutManager 一起使用,而不是一个一个地添加视图,尤其是当您有超过六个左右的视图时。

【讨论】:

我也试过在 addView 中添加 params 对象,但在 5.1.1、6.0.1 版本的 Android 中不起作用。 为此发布您的代码。我向您保证,在这些版本中没有针对此功能的版本错误。 FrameLayout.LayoutParams 参数 = FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); for (int i = 1; i

以上是关于如何在 Android 中以编程方式设置按钮的边距?的主要内容,如果未能解决你的问题,请参考以下文章

Android以编程方式设置在xml文件中声明的按钮边距? [复制]

如何在 Android 中以编程方式更改按钮大小?

Android:如何以编程方式设置 LinearLayout 边距

以编程方式在 RealtiveLayout 中设置 LinearLayout 的边距 - 不起作用

Android:如何在 Java 中以编程方式选中/取消选中 RadioGroup 中的单选按钮

以编程方式设置边距不起作用