2011-03-23 75 views
8

所以,假设我想在相对布局内以编程方式创建多个TextView。它看起来像每一个新的TextView我还可以创建一个新的LayoutParams像这样:每个新视图都需要一个新的layoutparams吗?

RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
         ViewGroup.LayoutParams.WRAP_CONTENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT); 

然后,添加我想用什么规则:

p.addrule(...,...); 

看来,我不能用这个单一的LayoutParams为多个TextView设置规则。这是一个真实的陈述吗?

感谢,

回答

6

对于多个视图使用相同的LayoutParams是好的,模块注意在视图通过布局之前更改LayoutParams会将更改应用于所有视图。

如果您只是想保存代码,那么您可以查看LayoutParams的copy constructor。这使您可以从另一个LayoutParams中的数据创建新的LayoutParams,而不必将两个引用到相同的LayoutParams实例。

1

如果你给同一个对象的LayoutParams多个TextViews,他们将共享所有的设置。这意味着如果您更改了某些内容,则更改将应用​​于所有TextView。一般来说,您会希望为每个TextView使用不同的实例。

2

创造和建设的正确的LayoutParams实例后,你可以用它在父每个View:

view1.setLayoutParams(params0); 

如果你想有(你想要的,我认为)则params的独立副本,可以改变它:

RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(params0); 
view1.setLayoutParams(params); 
+0

有趣的旁注:该CopyConstructor将只复制高度和宽度,因为它是ViewGroup.RelativeLayouts CopyConstructor。在API 19之上,你可以调用''new RelativeLayout.LayoutParams((RelativeLayout.LayoutParams)params0)''tto也复制指定的边距和规则。 – katzenhut 2014-05-15 09:39:39

+0

我的解决方案; http://stackoverflow.com/a/29664367/938427 – hungtdo 2015-04-16 02:33:50

相关问题