以编程方式创建View后添加样式

时间:2014-11-08 18:17:33

标签: android view styles programmatically-created

标题说明了一切,希望如此。

1)我以编程方式创建了一个View:

RelativeLayout rl = new RelativeLayout(this);

2)我想将它添加到现有的LinearLayout,之后我想将一个Style添加到RelativeLayout。类似的东西:

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

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

我知道有办法以编程方式添加Style。类似的东西:

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

但是在我将relativelayout添加到linearlayout之前,这将添加样式。 因此,relativelayout不是“打印”的,因为在我将它添加到linearlayout之前,他应该怎么知道linearlayout是他的父级。

在创建此视图并将其添加到父视图后,是否有人能够以编程方式将样式添加到视图中?

希望你理解我的意思。

1 个答案:

答案 0 :(得分:9)

构建视图后无法应用样式。正确的方法是在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>
        ...