在你的Android App中支持多主题 Part 1

我最近一直在忙着整我的黑客资讯App——Materialistic,今天难得有空,就让我来给大家分享一下我在Materialistic里使用的一个有趣的功能吧。

纵观现在的主流阅读类App,用户最常见的需求就是能够基于自己的阅读习惯选择明亮/灰暗两种风格的主题。为了用户的使用体验,我当然要为Materialistic添加这样的功能啦,要不然没人用我会很伤心的!而且很幸运的是,在Android里支持多种主题的切换并不麻烦(如果你的代码没有问题的话),实现这个功能蛮顺利的。所以今天我打算通过这篇博客给大家介绍我在Materialistic里面为了支持多种主题切换所使用的方法。

准备工作:

我今天就以明亮风格的主题来开始讲解吧:

values/styles.xml<style parent=”Theme.AppCompat.Light”><item>@color/colorPrimary</item><item>@color/colorPrimaryDark</item><item>@color/colorAccent</item><item>@color/textColorPrimary</item><item>@color/textColorSecondary</item><item>@color/textColorPrimaryInverse</item><item>@color/textColorSecondaryInverse</item><!– some other theme configurations for actionbar, overflow menu etc. –>…</style>values/colors.xml<!– brand color: orange –><color>#FF9800</color><color>#F57C00</color><color>#FFE0B2</color><!– accent color: red –><color>#FF5252</color><!– text color: white –><color>#FFFFFF</color><color>#9E9E9E</color><!– inverse text color: 87% black –><color>#DE000000</color><color>#9E9E9E</color>AndroidManifest.xml<application android:name=”.Application” android:theme=”@style/AppTheme”>…</application>

theme 中涉及的各种属性的含义可以在Android Developers blog 里面找到解释

贴心小提示

虽然Android里面style的属性/值非常全面,我们想要实现的效果style基本上都包含了有,但是Android文档有关这些主题属性的解释特别少,,尤其是对appcompat的解释。所以我们还是建议你写一个小Demo去测试style里面的属性/值应该怎么使用、能实现什么样的效果,然后再根据我们的需求去考虑使用哪些属性/值来实现我们想要的效果。

根据Android的Material Design规范,选项菜单图标的颜色应该和action bar上面的文字颜色保持一致,在我这是通过 android:textColorPrimary 来实现的,也就是使用#FFFFFF,基于这样的规范,我们需要为action bar提供一套白色的选项菜单图标。

贴心小提示

Google 有在 material-design-icons – Github 上提供一些开源的Material Design图标哦。

menu/my_menu.xml<menu xmlns:android=”http://schemas.android.com/apk/res/android”><item android:id=”@id/menu_comment”android:icon=”@drawable/ic_mode_comment_white_24dp” /><item android:id=”@id/menu_story”android:icon=”@drawable/ic_subject_white_24dp” /><item android:id=”@id/menu_share”app:actionProviderClass=”android.support.v7.widget.ShareActionProvider” /></menu>

为了使颜色一致,并且能让我们的Views和Texts能够在多个主题下被使用,最好的解决办法就是把颜色变成资源的引用,例如:android:textColor=”@color/textColorPrimary;又或者是通过设置style来改变,例如:在textEmptyStyle.xml文件下,我们只使用被选中的颜色

values/styles.xml<style><item>@color/textColorSecondary</item><item>@dimen/abc_text_size_headline_material</item>…</style>

我相信通过今天在上面所介绍的这些内容已经足够让我们实现一个符合Material Design的明亮风格的主题了,下一篇博文我将会给大家介绍如何实现一个符合Material Design的灰暗风格的主题,以及如何在运行App的过程中切换主题。希望大家继续关注我的博客哦。

再发展下来才有了:大霞美的花卉基地和清源山的花博园。

在你的Android App中支持多主题 Part 1

相关文章:

你感兴趣的文章:

标签云: