Как установить поля ImageView с помощью кода, а не XML - PullRequest
167 голосов
/ 05 августа 2010

Я хочу добавить неизвестное количество ImageView просмотров к моему макету с полем. В XML я могу использовать layout_margin так:

<ImageView android:layout_margin="5dip" android:src="@drawable/image" />

Существует ImageView.setPadding(), но нет ImageView.setMargin(). Я думаю, что это в духе ImageView.setLayoutParams(LayoutParams), но не уверен, что в это вписывается.

Кто-нибудь знает?

Ответы [ 13 ]

2 голосов
/ 19 октября 2013

пример кода здесь, его очень просто

LayoutParams params1 = (LayoutParams)twoLetter.getLayoutParams();//twoletter-imageview
                params1.height = 70;
                params1.setMargins(0, 210, 0, 0);//top margin -210 here
                twoLetter.setLayoutParams(params1);//setting layout params
                twoLetter.setImageResource(R.drawable.oo);
0 голосов
/ 18 февраля 2019

Вот пример, чтобы добавить 8px Margin слева, сверху, справа, снизу.


ImageView imageView = new ImageView(getApplicationContext());

ViewGroup.MarginLayoutParams marginLayoutParams = new ViewGroup.MarginLayoutParams(
    ViewGroup.MarginLayoutParams.MATCH_PARENT,
    ViewGroup.MarginLayoutParams.WRAP_CONTENT
);

marginLayoutParams.setMargins(8, 8, 8, 8);

imageView.setLayoutParams(marginLayoutParams);

0 голосов
/ 03 июля 2017

Использование метода, подобного этому, может в некоторых ситуациях избавить вас от головной боли. Если у вас есть два прохода программной обработки полей, то безопаснее проверить, есть ли уже какие-либо установленные layoutParams. Если поля уже есть, их нужно увеличить, а не заменять:

public void addMargins(View v, int left, int top, int right, int bottom) {
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) v.getLayoutParams();
    if (params == null)
        params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                                               ViewGroup.LayoutParams.WRAP_CONTENT);
    int oldLeft = params.leftMargin;
    int oldTop = params.topMargin;
    int oldRight = params.rightMargin;
    int oldBottom = params.bottomMargin;
    params.setMargins(oldLeft + left, oldTop + top, oldRight + right, oldBottom + bottom);
    v.setLayoutParams(params);
}
...