我没有找到一种方法来做到这一点编程,所以我在这里发布这个问题(我也没有发现任何与此相关的问题)。以编程方式应用样式资源
我有一个资源样式,在res/values/styles.xml中定义。我想要做的是在我的活动中使用java将这种风格应用到我操纵的View对象中。
是否有可能在Android中实现这一点,或者风格只能应用于使用android:style属性的对象?
我没有找到一种方法来做到这一点编程,所以我在这里发布这个问题(我也没有发现任何与此相关的问题)。以编程方式应用样式资源
我有一个资源样式,在res/values/styles.xml中定义。我想要做的是在我的活动中使用java将这种风格应用到我操纵的View对象中。
是否有可能在Android中实现这一点,或者风格只能应用于使用android:style属性的对象?
不,一般不会将样式资源应用于现有View实例。风格资源只能在施工期间应用到Views。
要理解为什么研究View(Context context, AttributeSet attrs, int defStyle)构造函数。这是唯一读取中央视图属性(如android:background)的地方,因此在构建View之后无法应用样式。视图的子类使用相同的模式,如TextView。您将需要使用setter手动应用样式属性。
请注意,如果您主动实例化视图,则可以通过defStyle
构造函数参数使用任何样式资源。
不,这是不可能的。您通常用来访问/ res /目录中任何内容的Resources
类不支持获取样式。 http://developer.android.com/reference/android/content/res/Resources.html
- 更新 -
我这里说的是不完全正确。 View(Context context, AttributeSet attrs, int defStyle)也像CRNV说,对于一些View实现
至少在一个TextView这是可能使用setTextAppearance(context, resid)
方法:可以在View
对象这样的构造给予风格。 resId
的风格可以在R.style.
找到。
分享此答案here,但由于它有自己的会话线程,所以我觉得它在这里也是相关的。
这个问题没有一条线路解决方案,但是这对我的用例起作用。问题是,'View(context,attrs,defStyle)'的构造函数没有引用实际的样式,它需要一个属性。因此,我们将:
在 'RES /值/ attrs.xml',定义一个新的属性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="customTextViewStyle" format="reference"/>
...
</resources>
在RES /价值/ styles.xml '我要创造我想在我的自定义的TextView使用的样式
<style name="CustomTextView">
<item name="android:textSize">18sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:paddingLeft">14dp</item>
</style>
在 'RES /价值/的themes.xml' 或' RES /价值/样式。XML”,修改的主题为你的应用/活动,并添加以下样式:
<resources>
<style name="AppBaseTheme" parent="android:Theme.Light">
<item name="@attr/customTextViewStyle">@style/CustomTextView</item>
</style>
...
</resources>
最后,在自定义的TextView,你现在可以使用构造与属性,它会收到您的风格
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context, null, R.attr.customTextView);
}
}
值得注意的是,我反复在不同的变体和不同的地方使用customTextView,但绝不要求视图的名称与样式或属性或任何内容相匹配。此外,这种技术应该适用于任何自定义视图,而不仅仅是TextView。
我没有以编程方式实例化视图。它是我创建的一个自定义视图,它扩展了LinearLayout ...所以我希望不要让用户使用style =“@ style/...”,我想以编程方式应用样式,但使用样式资源而不是以该现有样式的属性编程式应用属性。 – Thiago
“请注意,如果您主动实例化视图,则可以通过defStyle构造函数参数使用任何样式资源。” 你做了这件事吗? 我遇到问题并且在搜索时发现了这个问题。 http://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=12683 – sadaf