MarginLayoutParams.setMargins() 不起作用?

发布于 2024-12-17 13:23:53 字数 1180 浏览 3 评论 0原文

事情是这样的:我想以编程方式添加一些图像。除第一张图像外,图像的 topMargin 必须为 5dip,位于具有垂直方向LinearLayout 中> 方式。代码段下方:

LinearLayout body = (LinearLayout) findViewById(R.id.body);

    for (int i = 1; i <= 4; i++) {

        ImageView img = new ImageView(this);
        MarginLayoutParams lp = new MarginLayoutParams(-2, -2);

        img.setImageResource(R.drawable.image);
        if (i != 1) {

            lp.setMargins(0, 5, 0, 0);

        }
        img.setLayoutParams(lp);

        body.addView(img);
        body.requestLayout();
    }

通过运行程序,我可以看到 4 个图像(此处)一一垂直对齐,但没有 topMargin(如代码中,5dip )。 bodyLinearLayoutid。这是 XML 段:

<LinearLayout
            android:id="@+id/body"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#901b0e08"
            android:orientation="vertical"
            android:paddingLeft="6dp"
            android:paddingRight="8dp" >
 </LinearLayout>

我不明白这里出了什么问题。

谢谢。

Here's the thing: I want to add some images programmatically. The images should have to have a topMargin of 5dip except for the first image, in a LinearLayout with a vertical orientation manner. below the code segment:

LinearLayout body = (LinearLayout) findViewById(R.id.body);

    for (int i = 1; i <= 4; i++) {

        ImageView img = new ImageView(this);
        MarginLayoutParams lp = new MarginLayoutParams(-2, -2);

        img.setImageResource(R.drawable.image);
        if (i != 1) {

            lp.setMargins(0, 5, 0, 0);

        }
        img.setLayoutParams(lp);

        body.addView(img);
        body.requestLayout();
    }

By running the program I can see the the 4 images(here) vertically aligned one by one but there is no topMargin(as in the code,5dip). body is the id of the LinearLayout. here's the XML segment to:

<LinearLayout
            android:id="@+id/body"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#901b0e08"
            android:orientation="vertical"
            android:paddingLeft="6dp"
            android:paddingRight="8dp" >
 </LinearLayout>

I cant get what went wrong here.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

渔村楼浪 2024-12-24 13:23:53

尝试将您的 MarginLayoutParams 更改为:

LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT );

这样做的原因是 bodyLinearLayout ,因此您需要使用 >LinearLayout 特定的 LayoutParams

Try changing your MarginLayoutParams to this:

LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT );

The reason for doing this, is that body is a LinearLayout and thus you would want to use the LinearLayout-specific LayoutParams.

那伤。 2024-12-24 13:23:53

尝试为 ImageView 设置 paddingmargin 。有时效果很好。您可以直接设置 ImageView 的填充大小,无需声明 LayoutParams 。

Try to set padding but margin for ImageView. Sometimes it works fine. Your can directly set padding size to ImageView w/o declare LayoutParams.

凉世弥音 2024-12-24 13:23:53

,例如:

    lp.gravity = 0; //AXIS_X_SHIFT 

您可能需要设置 LayoutParams' gravity属性 对我来说效果很好。

You probably need to set LayoutParams' gravity property, for example:

    lp.gravity = 0; //AXIS_X_SHIFT 

That's what works fine for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文