2014-11-08 135 views
2

标题说明了这一切,希望。以编程方式创建视图后添加样式

1)我创建一个视图编程:

RelativeLayout rl = new RelativeLayout(this); 

2)我想将它添加到现有的LinearLayout之后,我想样式添加到RelativeLayout的。例如:

LinearLayout ll = (LinearLayout) findViewById(R.id.MyLinearLayout); 
RelativeLayout rl = new RelativeLayout(this); 
ll.addView(rl); 
//add Style to rl here 

我找不到办法做到这一点!

我知道有办法以编程方式添加一个样式。类似于:

RelativeLayout rl = new RelativeLayout(this, null, R.style.MyRelativeLayout); 

但是,这会在我将相关布局添加到linearlayout之前添加样式。 因此,relativelayout不是“打印”的,因为在我将它添加到linearlayout之前,他应该如何知道该linearlayout是他的父项。

有没有人有办法如何添加一个Style以编程方式添加到视图后,该视图已被创建并添加到父视图?

希望你明白我的意思。

+0

“印刷”是什么意思? – alanv 2014-11-09 01:58:16

回答

7

构建视图后无法应用样式。这样做的正确方法是在Android 5.0+上使用4参数构造函数,或者创建一个引用您的样式并使用3参数构造函数的主题属性。

// Works on versions prior to Android 5.0 
RelativeLayout rl = new RelativeLayout(this, null, R.attr.myRelativeLayoutStyle); 

// Works on Android 5.0 and above 
RelativeLayout r2 = new RelativeLayout(this, null, 0, R.style.MyRelativeLayout); 

RES /值/ attrs.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="myRelativeLayoutStyle" format="reference" /> 
    ... 

RES /值/ styles.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="MyRelativeLayout"> 
     ... 
    </style> 
    ... 

RES /值/的themes.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="MyAppTheme" parent="..."> 
     <item name="myRelativeLayoutStyle">@style/MyRelativeLayout</item> 
     ... 
+0

我在哪里正确地把主题和attrs.XML文件?直接进入值或者我应该创建一个单独的文件夹? @alanv – Mike 2014-11-11 07:43:05

+0

attrs.xml使用哪种资源类型?我只能选择值来获取资源@alanv – Mike 2014-11-11 07:57:06

+0

啊,对不起,我忘了给路径添加“值”。他们都应该去水库/价值观。 – alanv 2014-11-11 17:56:11