0

填充在自定义 ViewGroup 中无法按预期工作

你好:

我的布局具有以下结构:

RelativeLayout(with padding)    
    MainView(ViewGroup)

activety_main.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:background="#ffffff"
    android:paddingBottom="16dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    tools:context=".MainActivity" >

    <com.example.testandroid.MainView 
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

主视图:

public class MainView extends ViewGroup {
    public MainView(Context context, AttributeSet as) {
        super(context);
        addView(new MyView(context, null));
    } 

    @Override
    protected void dispatchDraw(Canvas canvas) {
        canvas.drawColor(Color.GREEN);
        super.dispatchDraw(canvas);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        for (int i = 0, len = getChildCount(); i < len; i++) {
            View v = getChildAt(i);
            v.layout(l,t,r,b);
        }
    }
}

我的观点:

public class MyView extends SurfaceView implements Callback {
    public MyView(Context contex, AttributeSet as) {
        super(contex, as);
        getHolder().addCallback(this);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        refresh();
    }

    private void refresh() {
        SurfaceHolder holder = getHolder();
        synchronized (holder) {
            Canvas canvas = holder.lockCanvas();
            if (canvas != null) {
                try {
                    Paint p = new Paint();
                    p.setColor(Color.RED);
                    canvas.drawCircle(10, 10, 10, p);
                } finally {
                    holder.unlockCanvasAndPost(canvas);
                }
            }
        }
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        refresh();
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }
}

现在,这就是我现在得到的:

在此处输入图像描述

如您所见,我创建的视图组MainView的背景为green. 并在此处动态MainView添加MyView背景为黑色的。

现在,问题是MyView相对于什么有填充MainView?因为我希望它占用 的所有空间MainView,也就是说,greed应该是不可见的。

为什么?但

4

2 回答 2

1

当你布局你的孩子时,它需要与你的位置相关。

为了充实自己,你会这样做child.layout(0, 0, getWidth(), getHeight());

于 2013-05-06T06:38:56.077 回答
-1

尝试这样做...

<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:layout_margin="16dp"


tools:context=".MainActivity" >

<com.example.testandroid.MainView
    android:layout_width="match_parent"
    android:layout_height="600dp"
 />

</RelativeLayout>
于 2013-05-06T07:02:11.560 回答