Java安卓学习总结(二十六)

第二十二章 样式与主题

有关颜色是资源

在res/values/colors.xml中添加颜色

<resources>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>

<color name="red">#F44336</color>
<color name="dark_red">#c3352b</color>
<color name="gray">#607d8b</color>
<color name="soothing_blue">#0083bf</color>
<color name="dark_blue">#005a8a</color>
</resources>

有关样式

在res/values/styles.xml中新建样式

<resources>
    ...

    <style name="BeatBoxButton" parent="Widget.AppCompat.Button">
        <item name="android:background">@color/dark_blue</item>
    </style>

</resources>

样式支持继承,可以在原先的样式name之后添加.xxx表示继承这个样式,还可以添加其它额外的属性。

<style name="BeatBoxButton.strong" >
        ...
    </style>

有关主题

主题的属性会自动应用于整个应用,所有未加额外声明的组件都会使用主题提供的样式。

覆盖主题属性

覆盖主题属性以达到修改其组件的默认样式的功能。要想覆盖主题的属性,得需要先找出这个属性的名字,需要沿着主题继承数一步步往上寻找,找到看上去像是需要覆盖的属性之后抄到现在使用的主题文件中进行覆盖,并运行应用查看是否达到效果。

<style name="AppTheme" parent="Theme.AppCompat">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/red</item>
<item name="colorPrimaryDark">@color/dark_red</item>
<item name="colorAccent">@color/gray</item>
<item name="android:windowBackground">@color/soothing_blue</item>
<item name="buttonStyle">@style/BeatBoxButton</item>
</style>

修改按钮属性

在沿着主题继承树向上寻找的过程中可以发现有很多关于各个组件的样式,例如Theme.Holo.Light下的button样式

<!-- Button styles -->
<item name="buttonStyle">@style/Widget.Holo.Light.Button</item>

<item name="buttonStyleSmall">@style/Widget.Holo.Light.Button.Small</item>
<item name="buttonStyleInset">@style/Widget.Holo.Light.Button.Inset</item>

<item name="buttonStyleToggle">@style/Widget.Holo.Light.Button.Toggle</item>
<item name="buttonCornerRadius">0dp</item>

<item name="switchStyle">@style/Widget.Holo.Light.CompoundButton.Switch</item>
<item name="mediaRouteButtonStyle">@style/Widget.Holo.Light.MediaRouteButton</item>

<item name="selectableItemBackground">@drawable/item_background_holo_light</item>
<item name="selectableItemBackgroundBorderless">?attr/selectableItemBackground</item>
<item name="borderlessButtonStyle">@style/Widget.Holo.Light.Button.Borderless</item>
<item name="homeAsUpIndicator">@drawable/ic_ab_back_holo_light</item>

这些针对于不同组件的样式也是可以覆盖的,可以先在自己创建的按钮样式中让其继承所需要的父样式,这样按钮就先有了父样式的常规属性,在此基础上可以进行修改。按钮样式修改完成后就可以在主题中引用这个按钮样式了。

<style name="AppTheme" parent="Theme.AppCompat">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/red</item>
<item name="colorPrimaryDark">@color/dark_red</item>
<item name="colorAccent">@color/gray</item>
<item name="android:windowBackground">@color/soothing_blue</item>
<item name="buttonStyle">@style/BeatBoxButton</item>
</style>

<style name="BeatBoxButton" parent="Widget.AppCompat.Button">
<item name="android:background">@color/dark_blue</item>
</style>

发表评论