首页
学习
活动
专区
工具
TVP
发布

Android 主题和样式

Hello,大家好!今天是周末,不知道大家是和好友聚聚会还是去外面逛逛,又或是读上一两本好书,不管怎样,希望大家有一个愉快的周末。

今天来和大家聊聊 Android 开发中的 Theme 和 Style,不知道大家是否和我一样,在刚刚学习 Android 那会,经常很迷惑,它们究竟是什么,之间又有什么关系?那好,我也在这里做个简单的介绍,希望起到一个抛砖引玉的效果(其实是我太菜,嘿嘿!)。

在这之前,给大家看看 Theme 是用来干什么的,上一个官方的图:

两种不同主题带来的效果

相信各位看完,会不会猛地一拍大腿,“这 TM 的不是换肤吗?还是那种要充 QQ 会员才有的特权!”,嘿嘿。

Style

首先我们先来看看 Style,顾名思义,Style 风格、样式的意思,用来定义View的样式,比如height、width、padding等,是一套能够应用于视图组件的属性。

我们常常编写在 res/values/styles.xml 下,编写如下:

编写样式完成后,引用样式如下:

运行应用后,可以看到我们的字体颜色为我们定义的样式里字体颜色,非常简单,效果就不贴了。除此之外,样式还支持继承,它能继承并覆盖其他样式的属性。那么应该怎么编写呢?,如下:

GreenText.Large 的命名表明,这个样式它继承了 GreenText 样式的属性,是不是感觉有点特别!除此之外,它不仅可以通过像这样通过命名表示样式继承关系,也还可以通过采用指定父样式来实现继承,如下:

以上就是 Style 的介绍,是不是非常简单呢?

Theme

看完了 Style,再来看看 Theme,翻译过来是主题的意思,它与 Style 作用一样,不同于

Style 作用于个一个单独 View,而它是作用于 Activity 上或是整个应用。试想下,如果要为所有组件逐个添加样式,那样子工作量得多大呀!同样是定义一套公共主题属性,样式属性需要逐个添加,而主题属性自动应用于整个应用。

我们先打开 AndroidManifest.xml 文件,就可以看到 application 标签下的 theme 属性,如下:

theme 属性指向主题叫做 Theme.AppCompat.Light,也是定义在 styles.xml 文件中。所以在 AndroidManifest 文件中出现,主题自然可以应用整个应用。查看主题定义(styles.xml 文件下),如下:

它们对应的属性值:

colorPrimary 属性主要用来设置工具栏背景色,而 colorPrimaryDark 用于顶部的状态栏,,文不如图,下面来张图,更加直观:

图片来源于网络

现在在 Android Studio 中创建项目都是自带 AppCompat 主题,也就是兼容包下,还有就是Android 系统自带的主题以及我们自定义的主题,以上是主题的主要来源,同样也来张合照吧:

图片来源于博客:https://www.cnblogs.com/zhouyou96/p/5323138.html

当然,如果我们有需要,也可以添加自己的属性值或覆盖属性值。假如我们想要修改应用背景色,我们也可以在布局文件手动设置背景色属性,如果有许多页面都这样去修改处理,无疑是比较费时的,其实我们只需要覆盖主题背景色属性就可以解决上面的问题了,但是我们首先得找到主题的源头,主题继承导致我们要一层一层往下找,找到我们要的属性,再回到我们的 Styles.xml 文件下覆盖这个属性,也就是设置我们想要的属性值。

。关于寻找属性值这个过程由于篇幅所限,我这里就不贴过程了。

好了,关于它们的介绍就简单说到这里,最后放下文档的链接:

官网文档链接:https://developer.android.google.cn/guide/topics/ui/look-and-feel/themes.html#Customize

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180715G0A17W00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券