如何以编程方式正确设置RelativeLayout的设置?

时间:2014-04-22 18:27:39

标签: java android layout view params

我正在以编程方式创建RelativeLayout,我想在其中放置三个对象:ListView和两个Button。我需要设置一些设置以在窗口中正确定位它们。现在我这样做:

RekativeLayout rl = new RelativeLayout(context);
rl.setBackgroundColor(Color.WHITE);
rl.setPadding(10, 10, 10, 10);

ListView listView = new ListView(context);
ListViewAdapter adapter = new ListViewAdapter(jParser.getArrayList(), context);
listView.setLayoutParams(new LayoutParams(wWidth, wHeight));
listView.setAdapter(adapter);

RelativeLayout.LayoutParams listParams = new RelativeLayout.LayoutParams(wWidth, wHeight);
listParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
listParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
listView.setId(98515);
listView.setLayoutParams(listParams);

Button moreButton = new Button(context);
moreButton.setLayoutParams(lp);
moreButton.setBackgroundColor(Color.GRAY);
moreButton.setText("More");

RelativeLayout.LayoutParams mButtonParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
mButtonParams.addRule(RelativeLayout.ALIGN_LEFT, listView.getId());
mButtonParams.addRule(RelativeLayout.BELOW, listView.getId());
mButtonParams.setMargins(0, 10, 0, 0);
moreButton.setLayoutParams(mButtonParams);

closeButton.setLayoutParams(lp);
closeButton.setBackgroundColor(Color.GRAY);
closeButton.setText("Close");

Button closeButton = new Button(context);
RelativeLayout.LayoutParams cButtonParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
cButtonParams.addRule(RelativeLayout.ALIGN_RIGHT, listView.getId());
cButtonParams.addRule(RelativeLayout.BELOW, listView.getId());
cButtonParams.setMargins(0, 10, 0, 0);
closeButton.setLayoutParams(cButtonParams);

rl.addView(listView);
rl.addView(moreButton);
rl.addView(closeButton);

但我想这种方法需要很多系统资源,是不可接受的。我该如何正确设置?

1 个答案:

答案 0 :(得分:1)

考虑到你提出的问题,你正在做的事情很好。为了这个问题,我仍然会回答这两个问题。
我想你的意思是RelativeLayout.LayoutParams。这样您就可以设置任何属性并自定义View的行为方式。

例如,要创建和设置基本高度/宽度:

RelativeLayout myRelativeLayout = new RelativeLayout(this);
        myRelativeLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

=============================================== ============
现在,就你们的其他疑惑而言,你真正的问题是,如果这是最优的,还有其他方法。 (虽然你应该真正创造另一个问题,我仍然会回答)。 正如提交中所提到的,这是xml资源的主要原因。在这里,您可以创建布局或视图,并使用数据填充它们。

这是一个快速指南:http://developer.android.com/guide/topics/ui/declaring-layout.html

快速细分:
-res / layout /是布局xmls的目录。 (LayoutInflater
- 在那些你去除其他视图(TextView,ImageView等)的内容之后 - 您必须引用和膨胀资源才能在代码中调用它们 -Once inflated你可以调用findViewById(resourceId)并将View强制转换为适当的Widget(视图)类型。

充气和引用视图项需要Context。这是了解其工作原理的快速指南:
http://www.doubleencore.com/2013/06/context/

其他参考: 您可能希望深入了解resources

希望这有帮助,并且编码愉快!