动态添加布局组件(结合XML和手动布局)

3
有没有一种方式可以结合基于xml的布局和“手动”布局?例如:
我使用以下“标准”xml布局:
 setContentView(R.layout.mainscreen);

然后我希望有更多的动态内容,可以像这样添加:

 LinearLayout layout = new LinearLayout(this);
 setContentView(layout);
 layout.addView(new CreateItemButton(this, "Button", 1));

我当然知道我不能像上面那一行那样创建一个新的布局,但我可能需要以某种方式初始化xml布局。但是,如果我想要动态添加组件,是不是只能使用100%手动布局?或者也许有另一种更优雅/正确的方法吗?
(我的目标是基于从数据库中获取的条目创建按钮。它们的数量和文本/内容会变化,因此尝试动态添加它们而不是在xml布局文件中添加它们。)
2个回答

6
你可以在你的xml布局中动态添加任何元素。你需要在你的xml布局中有一个容器来添加你的动态元素。比如一个id为"container"的空LinearLayout。你也可以动态构建所有内容,然后使用setContentView(yourView);其中,yourView是一个根布局元素,拥有其他已添加的子元素。

例如:

Button myButton = new Button(this);
myButton.setLayoutParams(params);
LinearLayout container = (LinearLayout)findViewById(R.id.container);
container.addView(myButton);

或者
LinearLayout myLayout = new LinearLayout(this);  
...
container.addView(myLayout);

谢谢,Maxim - 这个方法很有效。不确定为什么之前我没能让它工作,但现在我能够在xml文件中添加“静态”内容并直接在我的代码中添加动态内容了。 - user1341676

1
希望对您有所帮助。
尝试这段代码...
public class MainActivity extends Activity {

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);   

       RelativeLayout rl= (RelativeLayout) findViewById(R.id.rl);
       Button b2=new Button(this);
       b2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
       b2.setText("Dynamic");
       b2.setTextSize(30);
       b2.setTextColor(b1.getTextColors());
       rl.addView(b2);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接