2015-03-01 4 views
1

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

public class MyViewGroup extends RelativeLayout{ 

    Context mContext; 

    public MyViewGroup(Context context) { 
     super(context); 

     mContext = context; 

     init(); 
    } 

    public MyViewGroup(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     mContext = context; 
     init(); 
    } 

    public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 

     mContext = context; 
     init(); 
    } 

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 

    } 

    void init() 
    { 
     for(int i=0; i<2; i++) 
     { 
      ImageView myImage = new ImageView(mContext); 

      if(i==0) 
       myImage.setBackgroundColor(Color.CYAN); 
      else 
       myImage.setBackgroundColor(Color.MAGENTA); 


      myImage.setId(i); 

      RelativeLayout.LayoutParams params= new LayoutParams(50+i*70, 50+i*70); 
      myImage.setLayoutParams(params); 


      ImageView sImage = new ImageView(mContext); 

      if(i==0) 
      sImage.setBackgroundColor(Color.RED); 
      else 
       sImage.setBackgroundColor(Color.GREEN); 


      RelativeLayout.LayoutParams p= new LayoutParams(200+i*70, 200+i*70); 
      p.addRule(RelativeLayout.ALIGN_TOP | RelativeLayout.ALIGN_LEFT, myImage.getId()); 
      sImage.setLayoutParams(p); 

      addView(myImage); 
      addView(sImage); 

     } 

    } 
} 

внутри макета file.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <user.com.MyViewGroup 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

</RelativeLayout> 

Что мне не хватает?

С наилучшими пожеланиями

EDIT:

 RelativeLayout.LayoutParams params= new LayoutParams(200+i*70, 200+i*70); 
     params.addRule(RelativeLayout.CENTER_IN_PARENT); 
     myImage.setLayoutParams(params); 


     ImageView sImage = new ImageView(mContext); 

     sImage.setBackgroundColor(Color.RED); 


     RelativeLayout.LayoutParams p= new LayoutParams(20+i*70, 20+i*70); 
     p.addRule(RelativeLayout.CENTER_IN_PARENT); 
     p.addRule(RelativeLayout.ALIGN_BOTTOM, myImage.getId()); 
     sImage.setLayoutParams(p); 

     addView(myImage); 
     addView(sImage); 

ответ

0

вы пропустили назвать super.onLayout(changed, l, t, r, b);, который отвечает назначить позицию своих детей. В конкретной реализации ViewGroup, если для реализации по умолчанию вам достаточно, вы можете избежать переопределения этого метода. Если вы решите расширить ViewGroup, вы должны предоставить реализацию, поскольку она объявлена ​​как абстрактная. В вашем случае вы можете избавиться от

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 

} 
+0

Но тот же код работает без вызова super.layout, если я не использую LayoutParams и просто использовать myImage.Layout (0,0 50,50). Почему это? – user2498079

+0

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

+0

Еще одна вещь: я пытаюсь выровнять изображение в левом верхнем углу другого изображения, но выравнивание не работает. Почему это? См. Отредактированный вопрос. – user2498079