2011-12-15 3 views
0

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

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

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

Часть моего строителя:

_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); 
+0

Можете привести более подробную информацию, пожалуйста? Какова внешняя компоновка в этом случае? Например. если это FrameLayout, вы должны установить правильную гравитацию, чтобы заставить поля работать. Я объяснил это в [этом ответе] (http://stackoverflow.com/questions/8154716/add-a-margin-to-linearlayout-in-android/8196227#8196227). –

+0

Нам нужно больше кода, чем это, как вы создаете экземпляр lp2? – Blundell

+0

@alexsc мой конструктор расширяет RelativeLayout. Вы спрашиваете об этом? – DuyguK

ответ

0

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

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

Лучше заявить, что явно таким образом, как это:

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

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

Смежные вопросы