Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FrameLayout和setLayoutParams使我的视图无效_Java_Android_Graphics_Canvas - Fatal编程技术网

Java FrameLayout和setLayoutParams使我的视图无效

Java FrameLayout和setLayoutParams使我的视图无效,java,android,graphics,canvas,Java,Android,Graphics,Canvas,我有一个奇怪的行为与我的画布实现 我在做简单的画布,在上面画些东西,一切都很好。然后,我将按钮放在该视图上(在框架布局中),如下所示: FrameLayout frameLayout = new FrameLayout(this); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.W

我有一个奇怪的行为与我的画布实现

我在做简单的画布,在上面画些东西,一切都很好。然后,我将按钮放在该视图上(在框架布局中),如下所示:

FrameLayout frameLayout = new FrameLayout(this);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(10, 10, 10, 0);
button.setLayoutParams(layoutParams);
调用“setLayoutParams”时,整个视图将被重新绘制/无效。我不明白为什么,但我也因此遇到了问题。 第一次调用不是问题,但是调用“setLayoutParams”时,视图始终无效。这会在以后引起一些麻烦


也许有人会给我一些如何避免这种情况的建议?

如果您试图移动按钮,您应该将代码更改为:

MarginLayoutParams params = (MarginLayoutParams)button.getLayoutParams();
params.setMargins(10, 10, 10, 0);
button.setLayoutParams(params);

如果尝试移动框架布局,请将其更改为:

FrameLayout frameLayout = new FrameLayout(this);
MarginLayoutParams layoutParams = (MarginLayoutParams)frameLayout.getLayoutParams();
layoutParams.setMargins(10, 10, 10, 0);
frameLayout.setLayoutParams(layoutParams);

如果您试图移动按钮,则应将代码更改为:

MarginLayoutParams params = (MarginLayoutParams)button.getLayoutParams();
params.setMargins(10, 10, 10, 0);
button.setLayoutParams(params);

如果尝试移动框架布局,请将其更改为:

FrameLayout frameLayout = new FrameLayout(this);
MarginLayoutParams layoutParams = (MarginLayoutParams)frameLayout.getLayoutParams();
layoutParams.setMargins(10, 10, 10, 0);
frameLayout.setLayoutParams(layoutParams);

视觉更改(如setLayoutParams)应使视图层次结构无效。告诉我们您对特定层次结构的了解,您认为不应该(或不需要)发生失效。视觉更改(如setLayoutParams)会使视图层次结构失效。请告诉我们您对您的特定层次结构的了解,您认为不应该(或不需要)发生失效。