MarginLayoutParams.setMargins()不起作用?

Iro*_*som 3 android android-custom-view android-layout

事情就是这样:我想以编程方式添加一些图像.图像应当必须具有topMargin5dip除了第一图像,在一个LinearLayout具有一个vertical orientation方式.在代码段下方:

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();
    }
Run Code Online (Sandbox Code Playgroud)

通过运行程序,我可以看到4个图像(这里)逐个垂直对齐,但没有topMargin(如代码中所示5dip).bodyidLinearLayout.这是以下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>
Run Code Online (Sandbox Code Playgroud)

我不知道这里出了什么问题.

谢谢.

kas*_*rch 9

尝试将您MarginLayoutParams改为:

LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT );
Run Code Online (Sandbox Code Playgroud)

之所以这样做,是body为一个LinearLayout,因此你想使用LinearLayout特异性LayoutParams.