2013-05-01 3 views
0

Я пытался установить View внутри RelativeLayout, но что-то странное - happeing. Когда я устанавливаю LayoutParams в MATCH_PARENT, представление не отображается. Однако, когда я устанавливаю размер LayoutParams вручную, представление отображается корректно. Вот мой код:Android RelativeLayout не показывает View

protected void onCreate(Bundle savedInstanceState) { 
... 
    RelativeLayout layout = new RelativeLayout(this); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
     LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
    layout.setLayoutParams(params); 

    rectangle = new Rectangle (this); 
    RelativeLayout.LayoutParams rectParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, 
      LayoutParams.MATCH_PARENT); 
    rectangle.setLayoutParams(rectParams); 
    //rectangle.setLayoutParams(new LayoutParams(2000, 1280)); If I do this the Rectangle shows correctly 

    rectangle.setX(valueX); 
    rectangle.setX(valueY); 
    layout.addView(rectangle); 
} 
class Rectangle extends View { 
    Paint paint = new Paint(); 
    Paint paint2 = new Paint(); 
    RectF rect = new RectF(); 
    public Rectangle(Context context) { 
     super(context); 
    } 

    @Override 
    public void onDraw(Canvas canvas) {  
     paint.setColor(Color.rgb(255,20,147)); 
     rect.set(10, 10, 250, 90); 
     paint.setStyle(Paint.Style.FILL); 
     canvas.drawRoundRect(rect, 3, 3, paint); 

     paint2.setColor(Color.WHITE); 
     rect.set(10, 10, 250, 90); 
     paint2.setStrokeWidth(5); 
     paint2.setStyle(Paint.Style.STROKE); 
     canvas.drawRoundRect(rect, 5, 5, paint2); 
     canvas.drawLine(210, 39, 230,54, paint2); 
     canvas.drawLine(210, 63, 230,52, paint2); 
     super.onDraw(canvas);   
    } 
} 

Объект макета находится внутри свитка. Я пытаюсь изменить LayoutParameters, но не добился успеха. Ничего не видно. Есть идеи?

ответ

0

Возможно, проблема заключается в том, что вы устанавливаете высоту макета контейнера (RelativeLayout) как WRAP_CONTENT и высоту содержимого (Rectangle) как MATCH_PARENT. Попробуйте изменить

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 

с

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

Кроме того, вы звоните в два раза Setx (я полагаю, второй раз, когда вы хотите позвонить сеты):

rectangle.setY(valueY);

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