动态创建按钮不起作用

时间:2017-04-24 01:48:44

标签: java android button

我正在尝试动态创建一个按钮,但我尝试过的任何东西似乎都无法正常工作。这就是我到目前为止所做的:

io.grpc.netty.NettyServerTransport notifyTerminated
SEVERE: Transport failed
java.io.IOException: An existing connection was forcibly closed by the 
remote host. 

这是我的xml文件,它是一个约束布局,如果它可能与动态创建的线性布局冲突:

Button test = new Button(this);
test.setText("test");
test.setBackgroundResource(R.color.blue);
test.setLayoutParams (new LinearLayout.LayoutParams(60,ViewGroup.LayoutParams.FILL_PARENT));

2 个答案:

答案 0 :(得分:0)

您是否已将此按钮添加到布局中? 使用layout.addView(test);将测试按钮添加到布局中。

答案 1 :(得分:0)

好的,所以not working你的意思是没有出现在布局上。

这只是因为你创建了一个名为test的按钮,但它只在内存中而不是在活动的布局中!

要动态添加子视图,您必须将其添加到父视图。更详细地说,如果活动的布局(xml)包含容器(LinearLayout或任何其他容器布局),并且您想要将子视图(按钮test)添加到此容器,则应该:

使用findViewById()

在您的代码中绑定此容器(父视图)

2-使用addView()

将子视图添加到父视图

这是一些例子:

假设您的xml包含LinearLayout,其ID为myLinearLayout

1-使用findViewById()

中的onCreate()绑定它
mLinearLayout = (LinearLayout) findViewById(R.id.myLinearLayout);

2-使用button

addView()添加到其中
Button test = new Button(this);
test.setText("test");
test.setBackgroundResource(R.color.blue);
test.setLayoutParams (new 
LinearLayout.LayoutParams(60,ViewGroup.LayoutParams.FILL_PARENT));
mLinearLayout.addView(test); //this will show your button on layout

即使您想在运行时添加父视图,这里还有一个关于动态创建的视图的更一般的example

您可以详细了解addView()方法here