代码之家  ›  专栏  ›  技术社区  ›  NPike

样式多重继承

  •  38
  • NPike  · 技术社区  · 15 年前

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

    <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>
    
    3 回复  |  直到 15 年前
        1
  •  38
  •   Christopher Perry tegbird    4 年前

    官员 docs 说:

    如果使用点符号扩展样式,并且还包括 父属性,然后父样式将覆盖任何样式

        2
  •  9
  •   Odys    8 年前

    只能继承一种样式。但是,也可以使继承的样式从其他样式继承,依此类推:

    <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>
    

    不能继承多个样式,但是 建立继承链。

        3
  •  4
  •   Ivan Syabro    5 年前

    合并

    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

        4
  •  -2
  •   f0ster    14 年前

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

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