以编程方式创建视图后添加样式
Posted
技术标签:
【中文标题】以编程方式创建视图后添加样式【英文标题】:Add Style after creating a View programmatically 【发布时间】:2014-11-08 18:17:33 【问题描述】:标题说明了一切,希望如此。
1) 我以编程方式创建视图:
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
我找不到这样做的方法!
我知道有一些方法可以以编程方式添加样式。比如:
RelativeLayout rl = new RelativeLayout(this, null, R.style.MyRelativeLayout);
但这会在我将相对布局添加到线性布局之前添加样式。 因此,relativelayout 不是“打印”的,因为在我将它添加到 linearlayout 之前,他应该如何知道 linearlayout 是他的父级。
在创建视图并将其添加到父视图后,是否有人可以通过编程方式将样式添加到视图中?
希望你明白我的意思。
【问题讨论】:
“印刷”是什么意思? 【参考方案1】:您无法在构建视图后应用样式。正确的做法是在 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 文件?直接进入值还是我应该创建一个单独的文件夹? @alanv attrs.xml 使用哪种资源类型?我只能选择值来获取资源可访问@alanv 啊,抱歉,我忘了在路径中添加“值”。它们都应该放在 res/values 中。 我会试试 ;) @alanv【参考方案2】:两个有用的答案。
RelativeLayout layout = (RelativeLayout)getLayoutInflater().inflate(R.layout.template, null);
或
int buttonStyle = R.style.your_button_style;
Button button = new Button(new ContextThemeWrapper(context, buttonStyle), null, buttonStyle).
见https://***.com/a/24438579/5093308和https://***.com/a/5488652/5093308
【讨论】:
以上是关于以编程方式创建视图后添加样式的主要内容,如果未能解决你的问题,请参考以下文章