2013-05-01 84 views
0

我一直在尝试在RelativeLayout中设置一个View,但有些奇怪的事情正在发生。当我将LayoutParams设置为MATCH_PARENT时,视图不显示。但是,当我手动设置LayoutParams的大小时,视图显示正确。这里是我的代码:Android RelativeLayout does not show查看

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,并将内容(矩形)的高度设置为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);