博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中的Style、Theme详解以及发展史
阅读量:5749 次
发布时间:2019-06-18

本文共 3317 字,大约阅读时间需要 11 分钟。

Style介绍

style就像单词意思一样,风格,这里面是属性的集合,如果页面中有许多控件的属性值相同那么就可以把这些属性抽出来放到style里面,定义也很简单,在values文件下的styles里面创建就可以了。

例如:

Style的使用

这个相对来说就简单了,系统中也为我们预先定义了许多style,看了上一篇介绍的attr相信系统定义的这些style也会看懂吧。

文章最早发布于我的微信公众号 Android开发者家园 中,欢迎大家扫描下面二维码关注微信公众获取更多知识内容。

本文为sydMobile原创文章,可以随意转载,但请务必注明出处!

###Theme

Theme和Style使用的是同一个元素标签<style>区别在与 Theme 与 Style 作用的范围不同,Theme 要求你设置到AndroidMainfest.xml的<application>或者<activity>中。这两种设置,在不同的地方作用范围也是不一样的。

<application>中设置的话,那么就是说你的整个应用的所有Activity都是使用的 Theme 里面的风格了。在<activity>中设置的话,只是被设置的Activity中的 view 使用这个 Theme 里面的属性。

说起Theme来,就不得不说Android主题的进化史了,Theme的进化史也是Android系统的进步史。

Theme进化史

其实Theme没有我们想象中的那么高大上,就是主题。所谓的主题,我们来举个例子:

比如我们房子装修的进化史:刚开始住的都是破旧的土房,所以那管什么房子装修啊,能住就行了。最开始的Android也是这样的,刚开始谁管你页面内容丑不丑啊,能用就行了。你先在回头看看系统在3.0以前的手机,保证你能被丑哭了。随着社会的发展我们住上了瓦房子,里面也该稍微装修一下了,对应Android系统来说,在3.0以后Android系统也有了设计主题(Honeycomb holograghic theme全息主题),看上去好看一些了。再后来大家都住上了楼房,就有了装修样式。对应Android系统,在5.0的时候引入了Materail Design Theme 到此为止Android系统在主题上已经有了质的改变。

下面对应这几个样式我们来分别说一下,并简单展示一下对应的APP运行出来是什么样子的。

Theme的基本类(所有Theme的父类) android:Theme API 1 开始 这个Theme是最基础的Theme后面的Android Theme都是在这个基础上进行的改变

#####Theme基础说明

下面是样式是Theme的程序运行的结果

页面中设置Button的样式

点击Button的时候的呈现效果

CheckBox和ProgressBar的样式展现效果

Dialog 样式

最初的时候Android开发就是使用的这个Theme,这个针对的只是API 11之前开发APP的,所以 在现在说来这个主题已经过时了,不过后API新出来的主题都是继承了这个主题。

在 API11之前开发出来的软件如果使用默认主题的话,按钮为白色,点击事件是黄色,总之就是 很丑陋,没有设计美感。你可以运行一个Android3.0的模拟机看看系统画面就知道这个Theme了(注意一定要是原始Android系统)

Holo主题

在Android3.0(API 11 开始引进,Google推出了Holo主题(Honeycomb holograghic theme全息主题))。

这个主题比起之前的主题有了很大的变化。之后在4.0(API14)的时候google又发布了更加规范的设计Android Design,这样就有更多的Android应用采用了Holo主题了。所以我们一般认为是在Android4.0后用了Holo主题,其实在Android3.0的时候就已经引进了,在4.0的时候才更加规范了。

如果你想要你的 App 在 Android4.0 之前的手机上显示为Holo主题的话应该怎么做呢?很简单,这个时候就需要我们的v4、v7包了,这个时候就体现这两个包的价值了,其实这俩包就是为了你的App可以在老版本的Android系统上使用最新的 Android API 功能所诞生的。v4的包意思就是兼容到API为4的android手机(Android1.6),v7的包是兼容到API为7的Android手机(Android2.1),如果你考虑到你的程序在1.6以上的Android系统上可以使用Holo主题的话,就使用你的compileSdkVersion的SDK版本所对应的兼容包里面的样式就可以了。关于兼容包的内容之后再单独写篇文章介绍一下吧。

采用Holo主题的APP的运行效果

CheckBox和ProgressBar的样式

点击ListView的时候的效果

看起来是不是比最初的Theme要好很多啊,感觉很有科技感把。

#####Materail Theme

最有设计艺术的 Theme 来了,早前的UI都是拿着苹果手机的APP来设计APP的样式,是因为Android早期确实没有什么设计美感,在Android5.0就不同了,可以说Android5.0是Android的一个分水岭把,从Android5.0以后Android无论在运行还是设计美感上都一点也不输给iOS了。在Android5.0,Google推出了 Material theme(材料设计),这个设计可谓是重磅啊。这个设计风格很多iOS的应用也在使用。

Material Design官网的介绍:Material Design 是我们将经典的设计原则和科技、创新相结合而创造的设计语言。这份文档会随着我们对 Material Design 的探索而不断更新。

这是所有优秀的设计师都应该学习的设计风格,如果设计出一款完全符合Material Design的APP,肯定会让用户眼前一亮!

Material Design的官网 :https://material.io/

中文翻译: https://www.mdui.org/design/

许多优秀的APP设计就是来自官网的灵感

具体的样式风格种类可以参考:https://blog.csdn.net/tuke_tuke/article/details/73188426 总结的很详细

###小的知识点

v7包内的Activity类的样式必须和v7包内的Theme搭配如果Activity继承自普通包内的Activity的话,则样式不建议使用v7包内,如果使用v7包里面的样式也达不到想要的兼容效果,会根据手机系统的版本出现不同的Theme,所以v7包里面的Theme还是要和v7包内的Activity搭配。

compile 'com.android.support:appcompat-v7:24.2.1' v7后面的24.2.1说的这个v7包推出的版本号,也就是API24推出的,如果后面是小于21的话,则v7包内的样式兼容的就是Holo样式而不是Materail样式了,也就是说虽然都是v7包,但是版本不同,里面对应的内容也是不同的。

一个APP好的设计应该是在有自己的Theme但是要遵循Materail设计,我们应该定义好属于我们自己的Theme,应用到APP的风格中,所有的控件风格应该是在value中统一定义的。

如果系统默认定义的某个样式不符合你审美,你就可以定义自己的Theme,不过要继承系统的Theme,然后修改里面的某一方面的样式风格就可以了。比如修改Button的默认样式风格等等,都是可以的!

更多资料干货可以关注我的公众号!

个人创建了一个微信群,里面有行业的大佬,会不断的分享一些优质文章,交流技术,谈天说地。想要加入的可以添加我好友,拉你进群。早点找到组织,困惑会在交流中消失!

转载于:https://juejin.im/post/5ae9cc255188253dc612842a

你可能感兴趣的文章
php5编译安装常见错误和解决办法集锦
查看>>
Linux远程访问及控制
查看>>
MongoDB实战系列之五:mongodb的分片配置
查看>>
Unable to determine local host from URL REPOSITORY_URL=http://
查看>>
Java Tomcat SSL 服务端/客户端双向认证(二)
查看>>
java基础(1)
查看>>
ORACLE配置,修改tnsnames.ora文件实例
查看>>
用户无法在输入框中键入数字
查看>>
Workstation服务无法启动导致无法访问文件服务器
查看>>
Gradle:Basic Project
查看>>
.Net组件程序设计之远程调用(二)
查看>>
ant中文教程
查看>>
Linux常用命令(一)
查看>>
安装和使用 Elasticsearch
查看>>
WSUS数据库远端存储条件下切换域及数据库迁移
查看>>
红外遥控资料
查看>>
nginx: client intended to send too large body
查看>>
【VMCloud云平台】SCAP(四)租户(一)
查看>>
python---练习---即时标记
查看>>
linux释放内存的方法
查看>>