2014-02-28 96 views
0

我的应用程序的文本可以是黑色或白色;小,中,大;和粗体或不粗体。我无法想出一种方法来制作覆盖所有基地的样式,而不是仅仅包含大量样式并重复所有事情。是否有办法减少这种情况或一次应用多个?Android风格继承

<style name="Text"> 
    <item name="android:textSize">12sp</item> 
    <item name="android:textColor">#000000</item> 
    <item name="android:textStyle">normal</item> 
</style> 

<style name="Text.Small"> 
    <item name="android:textSize">8sp</item> 
</style> 

<style name="Text.Large"> 
    <item name="android:textSize">18sp</item> 
</style> 

<style name="Text.Small.Bold"> 
    <item name="android:textStyle">bold</item> 
</style> 

<style name="Text.Large.Bold"> 
    <item name="android:textStyle">bold</item> 
</style> 

<style name="Text.White"> 
    <item name="android:textColor">#ffffff</item> 
</style> 

<style name="Text.White.Small"> 
    <item name="android:textSize">8sp</item> 
</style> 

<style name="Text.White.Large"> 
    <item name="android:textSize">18sp</item> 
</style> 

<style name="Text.White.Small.Bold"> 
    <item name="android:textStyle">bold</item> 
</style> 

<style name="Text.White.Large.Bold"> 
    <item name="android:textStyle">bold</item> 
</style> 

其中一半是字面上重复的,从不同的父风格继承。我觉得这样做在CSS中完成并不重要,而不需要重复所有这些。我坚持在Android中这样做吗?或者我在这里忽略了什么?

回答

0

我挖,但似乎没有成为一个办法做到这一点本地到Android。我只是将它与每个样式中的重复部分放在一起,并且足以说明这是它可以在此情况下使用的DRYest

0

为避免代码重复,您可以仅声明该项目一次,并使用parent attribute将其从其他样式中引用。

示例使用您提供的代码:

<style name="Text.Small.Bold"> 
    <item name="android:textStyle">bold</item> 
</style> 

<style name="Text.Large.Bold"> 
    <item name="android:textStyle">bold</item> 
</style> 

可以在改变:

<style name="Text.Small.Bold"> 
    <item name="android:textStyle">bold</item> 
</style> 

<style name="Text.Large.Bold" parent="Text.Small.Bold" /> 
+0

它似乎不以这种方式工作。当我应用Text.Large.Bold样式时,它仅从Text.Small.Bold父项获取属性。 – Dave