MarginLayoutParams.setMargins () не работает? - PullRequest
2 голосов
/ 21 ноября 2011

Вот в чем дело: я хочу добавить некоторые изображения программно.Изображения должны иметь topMargin 5dip, за исключением первого изображения, 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();
    }

Запустив программу, я вижу 4 изображения (здесь), выровненные по вертикали одно за другим, но нет topMargin (как в коде, 5dip),body является id из LinearLayout.вот сегмент 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>

Я не могу понять, что здесь пошло не так.

Спасибо.

Ответы [ 3 ]

8 голосов
/ 21 ноября 2011

Попробуйте изменить MarginLayoutParams на это:

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

Причина для этого заключается в том, что body является LinearLayout, и поэтому вы захотите использовать LinearLayout -специфичныйLayoutParams.

1 голос
/ 21 ноября 2011

Возможно, вам нужно установить свойство LayoutParams ' gravity , например:

    lp.gravity = 0; //AXIS_X_SHIFT 

Вот что у меня хорошо работает.

1 голос
/ 21 ноября 2011

Попробуйте установить padding, но margin для ImageView.Иногда это работает нормально.Вы можете напрямую установить размер отступа в ImageView без объявления LayoutParams.

...