在运行时Android更改自定义视图的大小

时间:2013-03-29 21:13:44

标签: android android-layout android-ui android-custom-view

我正在更改运行时扩展Android height的{​​{1}}的{​​{1}}和width,如下所示:

CustomView

此代码位于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

结果如下:

enter image description here

我指定的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中输入的大小不同?

3 个答案:

答案 0 :(得分:0)

不确定您正在使用哪个对象进行观看,但您可能会尝试这样的事情:

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

答案 1 :(得分:0)

我的问题出在CustomView的绘图中。在onDraw()中,我使用了width的{​​{1}}和height而不是canvas本身。

答案 2 :(得分:0)

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

Handler handler = new Handler();
handler.post(new Runnable() {
    public void run() {
    //check sizes and update sizes here
    });