我为 style 和 theme 而狂(2)

style 的继承

  • Parent
<style name="Parent"/>
  • 明确的 child, 所谓的明确就是我们通过定义指出 style 继承关系。
<style name="Child" parent="Parent"/>
  • 隐含的 child
<style name="Parent.Child"/>

无论是隐式还是显式定义继承关系,其效果是相同的,并无不同。

我们想象一下如果在一个标签中同时使用显式和隐式来定义标签继承不同父 style 会是怎么样呢?

<style name="Implicit"/>
<style name="Explicit"/>
<style name="Implicit.Child" parent="Explicit"/>

选择题

  • 继承两者
  • 继承 Implicit
  • 继承 Explicit

正确答案是 继承 Explicit
当隐式和显式相遇,显式会胜出,不过我们在开发中应该避免这样混用隐式和显式的情况。

当我们看到下面代码,我们会满心欢喜以为 style 父级为 Widget.Button

<Button 
  style="@style/Widget.Button.Calculator"
/>

不过当我们看到 style 中的定义就发现我们猜想是错误的。

<style 
   name="Widget.Button.Calculator"
  parent="Widget.HahaFooledYou.button"
/>

这样需要我们定义 style 的 name 时候也需要花一些心思,避免误导。

那么现在有关定义 style 名称我给大家一点建议

<style name="BorderlessButton"
    parent="Widget.AppCompact.Button.Borderless"/>

在定义具有显式继承的 style 的名称是要避免使用来分隔,用驼峰吧。

举两个反面的例子

<style name="Widget.Button" 
        parent="Widget.AppCompat.Button"/>
    <style name="Widget.Button.Borderless" 
        parent="Widget.AppCompat.Button.Borderless"/>
    原文作者:zidea
    原文地址: https://www.jianshu.com/p/6112e1e41d8c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞