样式多重继承

时间:2010-07-15 16:23:23

标签: android styles

有没有办法让样式继承多个其他样式,而不仅限于:

<style name="WidgetTextBase">
    <item name="android:typeface">serif</item>
    <item name="android:textSize">12dip</item>
    <item name="android:gravity">center</item>
</style>

<style name="BOSText" parent="WidgetTextBase">
    <item name="android:textColor">#051C43</item>
</style>

我希望BOSText也继承自:

<style name="WidgetTextHeader">
    <item name="android:textStyle">bold</item>
<style>

4 个答案:

答案 0 :(得分:28)

不,样式不支持多重继承(至少不支持Android 3.2)。

答案 1 :(得分:4)

您只能继承一种风格。但是,您也可以使继承的样式继承自另一个样式,依此类推:

<style name="WidgetTextBase">
    <item name="android:typeface">serif</item>
    <item name="android:textSize">12dip</item>
    <item name="android:gravity">center</item>
</style>

<style name="WidgetTextHeader" parent="WidgetTextBase">
    <item name="android:textStyle">bold</item>
</style>

<style name="BOSText" parent="WidgetTextHeader">
    <item name="android:textColor">#051C43</item>
</style>

您不能继承多种样式,但可以设置继承链。

答案 2 :(得分:1)

对于那些正在寻求将多种样式合并为一种样式的解决方案的人,可以使用

public void applyStyle (int resId, boolean force)

https://developer.android.com/reference/android/content/res/Resources.Theme#applyStyle(int,%20boolean)。 并以这种方式应用

context.theme.applyStyle(R.style.MyAdditionalStyle, false)

每当您将true指定为第二个参数时,它就会覆盖主题中的现有值,而当false时,它将仅添加来自R.style.MyAdditionalStyle的非重叠值

我还没有测试多种样式的场景,但是根据文档,您可以实现它。这就是这种方法可以用作多重继承的替代方法的方式。

答案 3 :(得分:-1)

样式标记上有一个父属性,可以让你继承其他样式......

<style name="CodeFont" parent="@style/WidgetTextBase">
   <item name="android:textStyle">bold</item>
</style>

http://developer.android.com/guide/topics/ui/themes.html