为什么必须为放在视图中的每个元素创建一组新的RelativeLayout.LayoutParams?

时间:2011-09-23 20:13:29

标签: android android-layout

我必须以编程方式执行此操作。所以,忍受我。

我有文字和两个按钮,我设置为彼此对齐。所以我为每个实例创建了一个新的RelativeLayout.LayoutParams实例,并添加了一个规则来将它设置在另一个之下。这很有效,我很满意。

我的问题是:为什么我必须创建一个新实例才能让布局以这种方式显示它们?有没有办法减少以下代码,以便它不是那么重复(除了编写我自己的私有方法来干它。我想知道是否有一种方法可以用更少的代码行完成同样的事情我利用的东西可能在Android SDK中被忽略了)?我是否必须继续为每个元素创建一个新的RelativeLayout.LayoutParams实例?

layout = new RelativeLayout(this);
layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

text = new TextView(this);
text.setId(1);
text.setText("This is text");
layout.addView(text);

myButton1 = new Button(this);
myButton1.setId(2)
myButton1.setOnClickListener(this);
RelativeLayout.LayoutParams buttonParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
buttonParams.addRule(RelativeLayout.BELOW, text.getId());
layout.addView(myButton1, buttonParams);

myButton2 = new Button(this);
myButton2.setId(3)
myButton2.setOnClickListener(this);
buttonParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
buttonParams.addRule(RelativeLayout.BELOW, myButton1.getId());
layout.addView(myButton2, buttonParams);

2 个答案:

答案 0 :(得分:1)

不幸的是,removeRule()没有RelativeLayout.LayoutParams方法(至少根据API),因此您每次都必须创建一个新的LayoutParams对象。

我倾向于同意@jeffamaphone你应该更喜欢xml布局而不是以编程方式设置布局。即使您没有将整个布局放在xml中,也应该使用资源ID(有关详细信息,请参阅doc)来设置项目的ID。这将保证唯一的身份。

答案 1 :(得分:0)

您可以使用0设置您添加的任何规则。

buttonParams.addRule(RelativeLayout.BELOW, 0);