我正在尝试动态创建一个按钮,但我尝试过的任何东西似乎都无法正常工作。这就是我到目前为止所做的:
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));
答案 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