2

我正在更改heightwidth我的在运行时CustomView扩展Android View,如下所示:

        @Override
        public void onGlobalLayout() {          
            if(!initialized) {          
                int containerHeight = instance.getHeight();
                int containerWidth = instance.getWidth();
                myView.getLayoutParams().height = (int) (containerHeight * HEIGHT_RATIO);
                myView.getLayoutParams().width = (int) (containerWidth * WIDTH_RATIO);
                instance.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                initialized = true;
            }
        }

此代码在container view构造函数中。

另外我CustomView onMeasure()的如下:

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // maximum width we should use
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);
        setMeasuredDimension(width, height);
    }

这是结果:

在此处输入图像描述

width和我指定height的位置与绿色矩形的大小相同。

我的问题是:为什么我的自定义视图(红色矩形)的实际大小与我在LayoutParams?

4

3 回答 3

0

不确定您正在为您的视图使用什么对象,但您可以尝试这样的事情:

CustomViewget.Window().setLayout(370, 480); //控制宽度和高度

于 2013-03-29T21:37:06.900 回答
0

我的问题出在图纸上CustomView。在onDraw()中,我用widthandheight代替canvasView本身。

于 2013-04-01T07:11:42.053 回答
0

调用时可能无法正确计算大小,因此您可能需要将代码放在处理程序中并在发布时运行它,以便在 UI 线程上的所有其他操作完成后完成。试试下面的代码。

Handler handler = new Handler();
handler.post(new Runnable() {
    public void run() {
    //check sizes and update sizes here
    });
于 2015-03-07T18:12:28.303 回答