Как я могу установить маржу для представления в другом классе? - PullRequest
0 голосов
/ 15 декабря 2011

Я делаю конструктор и устанавливаю некоторое представление внутри программно и добавляю некоторое правило.поэтому, когда я вызываю конструктор, я вижу представление по умолчанию.

Теперь я хочу получить некоторые из этого представления и изменить маржинальное поле. Это базовое, я знаю, но я не работаю для меня.

Может кто-нибудь помочь?

Часть моего конструктора:

 _photoImgVw = new ImageView(getContext());
    _photoImgVw.setImageResource(R.drawable.pic);
    _photoImgVw.setAdjustViewBounds(true);
    _photoImgVw.setMaxWidth(100);
    _photoImgVw.setId(2);


     lp2=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        lp2.setMargins(0,0,0,0);
        addView(_photoImgVw,lp2);


        LayoutParams lp3=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        lp3.addRule(RelativeLayout.RIGHT_OF,_photoImgVw.getId());
        lp3.setMargins(0,0,0,0);
        addView(_nameTxt,lp3);

Позвоните в мероприятии для изменения:

 facebookPersonView.lp2.setMargins(10,300,100,20);

1 Ответ

0 голосов
/ 15 декабря 2011

Убедитесь, что параметры макета lp2 являются экземпляром класса RelativeLayout.LayoutParams вместо MarginLayoutParams или любого другого его подкласса с именем LayoutParams (их довольно много, см. начало документации ) .

Если параметры являются экземпляром последнего, они не будут содержать никаких правил для RelativeLayout. Это означает, что родительский макет не знает, где разместить представление¹ и, следовательно, не может иметь никакого смысла из полей.

Лучше объявить об этом явно следующим образом:

RelativeLayout.LayoutParams lp2 
                    = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
                                                      LayoutParams.WRAP_CONTENT);
lp2.setMargins(0,0,0,0);
addView(_photoImgVw,lp2);

¹ Это все равно сделает его видимым в верхнем левом углу, но это своего рода неопределенное состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...