轻听是一款小而美的Android本地音乐播放器,而它的特点之一就是拥有多彩的外衣,
其中,左边6张是白天模式下的几种不同主题色的样式,右边是夜间模式。
那么轻听是如何实现变色的呢?
主要是结合以下两种方式:自定义Style和Theme
动态配置主题色
自定义Style和Theme
Style和Theme主要用来实现白天模式和夜间模式。
一个Style是一系列属性的集合,用来指定View或者Window的外观和格式。它可以指定的属性包括高度, Padding, 文字颜色,文字尺寸,背景颜色等等。
Style是在Xml资源文件中定义的,比如:
true
end
?android:attr/textColorPrimary
在布局文件中是这样使用的:
android:id="@+id/text_item_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/ListItemTitleStyle" />
这样一个Style就可以运用在多个地方,既可以统一样式,又可以减少代码量。
而Theme,其实就是一个Style,不同于我们上面提到对单一View的应用,Theme是应用于整个Activity或Application的。各位Android开发同学一定不陌生,在Manifest的Activity声明中就会经常看到。
这样,AppLightTheme.NoActionBar中的所有属性都会应用在整个Activity中。
轻听这里,实现夜间模式分三步:自定义Style
应用Style中的属性
设置Theme
自定义Style
我们这里,就是写两个Style,然后各自有一套对应的颜色值。
简单介绍一下几个主要的颜色值:
colorPrimary: 主题色
colorAccent: 辅助色(或强调色)
textColorPrimary: 主要的文字颜色,一般TextView的文字都是这个颜色
textColorSecondary: 辅助的文字颜色,一般比textColorPrimary的颜色弱一点,用于一些弱化的表示
windowBackground: Window的背景色
我们在资源文件中写对应的两套Style:
@color/colorPrimary
@color/colorAccent
@color/colorPrimaryTextBlack
@color/colorSubTextBlack
@color/white
@color/darkColorPrimary
@color/darkColorAccent
@color/white
@color/colorSubTextWhite
@color/dark_bg
细心的同学会发现,Style里的属性,有的前面会以“android:”开头,如android:textColorPrimary,有的则没有,如colorPrimary。
以“android:”开头的属性,是系统的属性。而另一种属于自定义的属性,在资源文件中声明如下:
format包括boolean, color, dimension, enum, flag, float, fraction, integer, reference, string。 在此就不赘述了,这是它们的一个相当灵活的使用方式。
应用Style中的属性
比如,colorAccent是在design包中定义的,