1

我已经用谷歌搜索了几个小时,但找不到解决方案……我发现了许多类似的问题和答案,但没有一个对我有用。

我想做的事:我有一个用来绘制我的应用程序的视图。现在我想在当前画布的“顶部”添加一个布局。布局应包含一个按钮,并且每边有 20 像素的边距。我找到了类似以下代码的代码片段,但屏幕上没有任何反应。没有按钮。没有什么。

这是我正在使用的代码:

LinearLayout bottomBar = new LinearLayout(this);
bottomBar.setOrientation(LinearLayout.VERTICAL);

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(20, 20, 20, 20);

Button button = new Button(this);
button.setText("text");
bottomBar.addView(button, layoutParams);
bottomBar.draw(canvas);

我究竟做错了什么?

4

2 回答 2

3

您创建布局的事实LinearLayout bottomBar = new LinearLayout(this);并不意味着它已附加到屏幕上。

另外,不要在你的酒吧上画画。将其包含在屏幕中后,系统将呼叫您。

例如,假设您的 XML(使用 setContentView 膨胀)有一个 ID 为 R.id.frame 的 FrameLayout,那么您可以执行以下操作:

LinearLayout bottomBar = new LinearLayout(this);
bottomBar.setOrientation(LinearLayout.VERTICAL);

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(20, 20, 20, 20);

Button button = new Button(this);
button.setText("text");
bottomBar.addView(button, layoutParams);

FrameLayout frame = (FrameLayout) findViewById(R.id.frame);
frame.addView(bottomBar);

你看......你必须在已经在屏幕上的视图组中调用“addView”。

或者,您可以调用:setContentView(bottomBar);将屏幕上的任何内容替换为bottomBar

于 2013-04-10T14:19:34.650 回答
0

您没有为您的LinearLayout提供宽度/高度,也没有将其附加到您的视图中。

于 2013-04-10T14:11:24.907 回答