我正在以编程方式创建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);
但我想这种方法需要很多系统资源,是不可接受的。我该如何正确设置?
答案 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。
希望这有帮助,并且编码愉快!