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



我必须通过编程来完成。所以,请耐心听我说。

我有文本和两个按钮,我设置为彼此对齐。所以我创建了一个新的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);

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

我倾向于同意@jeffamaphone的观点,你应该更喜欢xml布局而不是编程设置布局。即使不把整个布局放在xml中,也应该使用资源id(详情请参阅文档)来设置项目的id。这将保证一个唯一的id。

你可以使用0设置你添加的任何规则为false。

buttonParams.addRule(RelativeLayout.BELOW, 0);

最新更新