无法在自定义ViewGroup上进行垂直对齐

Ric*_*h S 2 java android android-layout android-linearlayout

我有以下类,它扩展了ViewGroup类.

我表示我希望文本对齐'BOTTOM | RIGHT'如果Button在LinearLayout中,它可以正常工作,但在我的自定义派生中,它只考虑'RIGHT'参数.

我大大简化了课程,使其更容易阅读.

有什么明显的东西我不见了吗?

谢谢Rich

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

Ich*_*aum 5

你必须用它View.measure(int widthMeasureSpec, int heightMeasureSpec)来告诉你Button,不管它想要多大,它都将是200 x 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));
}
Run Code Online (Sandbox Code Playgroud)