2012-08-14 44 views
2

我有以下类,它扩展了ViewGroup类。无法获得垂直对齐工作自定义ViewGroup

我指出我希望文本对齐'BOTTOM | RIGHT',如果Button处于LinearLayout中,则工作正常,但在我的自定义派生中,它只考虑'RIGHT'参数。

我已经大量简化了我的课程,使其更易于阅读。

有什么明显的我失踪了吗?

感谢 丰富

public class LayoutManager extends ViewGroup 
{ 
    private Button b1; 
    public LayoutManager(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
     LocalInit(context); 
    } 

    public LayoutManager(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     LocalInit(context); 
    } 

    public LayoutManager(Context context) 
    { 
     super(context); 
     LocalInit(context); 
    } 
    private void LocalInit(Context context) 
    { 
     b1=new Button(context); 
     b1.setText("hello button 1"); 
     b1.setGravity(Gravity.BOTTOM | Gravity.RIGHT); 
     super.addView(b1); 
    } 
    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) 
    { 
     b1.layout(100, 100, 300, 300); 
    } 

} 

回答

5

你必须使用View.measure(int widthMeasureSpec, int heightMeasureSpec)要告诉你的Button,这将是200×200,无论它希望有多大是。加入到LayoutManager

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    b1.measure(MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY)); 
} 
+0

辉煌,谢谢! – 2012-08-26 15:05:43