在以编程方式创建视图后添加样式

4
标题已经说明了一切。
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);

但是在我将相对布局添加到线性布局之前,这将在添加样式。因此,在将其添加到线性布局之前,相对布局不会“打印”,因为他如何知道线性布局是它的父级。
有人有办法在视图创建并添加到父级后以编程方式添加样式吗?
希望你理解我的意思。

“Printed” 是什么意思? - alanv
2个回答

14

在构造视图后无法应用样式。 正确的方法是在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/values/attrs.xml:

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

res/values/styles.xml:

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

res/values/themes.xml:

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

我应该把主题和attrs.XML文件放在哪里?直接放在values文件夹中还是应该创建一个单独的文件夹?@alanv - Mike
attrs.xml使用哪种资源类型?我只能选择Values以使资源可访问。@alanv - Mike
啊,抱歉,我忘记在路径中添加“values”了。它们都应该放在res/values中。 - alanv
我会尝试的 ;) @alanv - Mike

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接