导读:

本篇文章主要根据官方文档修改,介绍了样式和主题的使用以及要注意的问题,同时也提供了Android Studio 快速抽取Style 和 编辑 Theme 的方法.

Tips

使用Android Studio 的同学,可以直接在布局文件对应控件:
右键 -> Refactor -> Extract -> Style 抽取样式
右键 -> Refactor -> Extract -> Layout 抽取布局 include标签

样式简介:

样式是指为 View 或窗口指定外观和格式的属性集合.样式可以指定高度、填充、字体颜色、字号、背景色等许多属性. 样式是在与指定布局的 XML 不同的 XML 资源中进行定义.

因此我们可以使用样式将xml文件中的控件属性抽取简化

设置样式的方式有两种:

  • 如果是对单个视图应用样式,在布局 XML 中的 View 元素添加 style 属性.

  • 如果是对整个Activity或应用来应用样式,在 Android 清单中的或节点添加android:theme属性.

系统自带的Theme and Style的标准属性文档

  • R.styleable.Theme该链接提供了系统自带的,可在主题(Theme)中使用的标准属性的列表

  • R.style该链接可查到系统自带的,在样式(Style)中使用的标准属性的列表


单个视图View的使用

一、在res/values/目录下自定义以节点的.xml文件(或直接在styles.xml也行)定义我们想要实现的样式

简化TextView为例

<?xml version="1.0" encoding="utf-8"?>
<resources><style name="CodeFont" ><item name="android:layout_width">fill_parent</item><item name="android:layout_height">wrap_content</item><item name="android:textColor">#00FF00</item><item name="android:typeface">monospace</item></style>
</resources>

二、在对应的控件上调用该样式


<TextView
        style="@style/CodeFont"android:text="Hello World!"/>

继承

  • 样式具有继承关系,可以通过

   //.xml文件,@是说明系统已经定义过的,@android:style/  是必须带上的<style name="RedText" parent="@android:style/TextAppearance"><item name="android:textColor">#FF0000</item></style>//控件<TextView
        style="@style/RedText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"/>

如果想要继承我们自定义的


<style name="CodeFont.Blue"><item name="android:textColor">#0000FF</item></style><style name="CodeFont.Blue.Big"><item name="android:textColor">#0000FF</item><item name="android:textSize">30sp</item></style>

注意 : 句点链接名称的继承方式只适用于我们自定义的资源样式.无法继承Android内建样式,引用内建样式必须使用parent属性.

Actvity或Application使用(Theme主题的使用)

声明主题的例子:

<?xml version="1.0" encoding="utf-8"?>
<resources><style name="CustomTheme"><item name="android:windowNoTitle">true</item><item name="windowFrame">@drawable/screen_frame</item><item name="windowBackground">@drawable/screen_background_white</item><item name="panelForegroundColor">#FF000000</item><item name="panelBackgroundColor">#FFFFFFFF</item><item name="panelTextColor">?panelForegroundColor</item><item name="panelTextSize">14</item><item name="menuItemTextColor">?panelTextColor</item><item name="menuItemTextSize">?panelTextSize</item></style>
</resources>

注意 : 我们用了@符号和?符号来应用资源.@符号表明了我们应用的资源是前边定义过的(或者在前一个项目中或者在Android 框架中).问号?表明了我们引用的资源的值在当前的主题当中定义过.通过引用在里边定义的名字可以做到(panelTextColor 用的颜色和panelForegroundColor中定义的一样)。这种技巧只能用在XML资源当中.


  • 要为所有Activity设置主题,在AndroidManifest.xml清单文件中的节点,加入带样式名称的android:theme属性
<application android:theme="@style/CustomTheme">
  • 要为应用中某一个Activity应用主题,在AndroidManifest.xml清单文件中的节点,加入带样式名称的android:theme属性
<activity android:theme="@android:style/Theme.Dialog"> //系统的<activity android:theme="@style/CustomTheme"> //自定义的
  • 如果想用某个系统自带的主题,但想做些调整,可以使用样式的继承属性,然后修改想改的属性

<color name="custom_theme_color">#b0b0ff</color>
<style name="CustomTheme" parent="android:Theme.Light"><item name="android:windowBackground">@color/custom_theme_color</item><item name="android:colorBackground">@color/custom_theme_color</item>
</style>

==注意==

  1. 句点链接名称的继承方式只适用于我们自定义的资源样式.无法继承Android内建样式,引用内建样式必须使用parent属性.
  2. style属性不使用android:命名空间前缀 如:style=”@style/RedText”,style=..前
  3. @符号表明了我们应用的资源是前边定义过的(或者在前一个项目中或者在Android 框架中)。问号?表明了我们引用的资源的值在当前的主题当中定义过。通过引用在里边定义的名字可以做到(panelTextColor 用的颜色和panelForegroundColor中定义的一样)。这中技巧只能用在XML资源当中。
  4. style 和 Theme都具有继承属性,只是最终调用的位置不同而已

根据平台版本选择主题

如,在res/values/目录下的一个XML文件(通常是res/values/styles.xml):


<style name="LightThemeSelector" parent="android:Theme.Light">...
</style>

那么要让该主题在运行在Android3.0 (API 11)或以上的版本,我们可以在res/values-v11目录下的的XML文件中声明一个


<style name="LightThemeSelector" parent="android:Theme.Holo.Light">...
</style>

==有可能出现的Bug==:

  1. 如果写完代码,代码上什么错误都没报,一运行程序就闪退,看到 android.support.v7.view.WindowCallbackWrapper.onSearchRequested 这句,代表v7包下的主题(Theme)用错了,把parent的android删掉即可

  2. 注意我们继承的系统主题的对应属性的命名方式前是否有android字样,不对应的话会报This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR类似的错误


Android Studio Style快速抽取:

右键->Refactor->Extract->Style->ok就会抽取到res/values/styles.xml了

Android Studio Theme Editor(主题编辑器)

  1. 工具栏Tools->Android->Theme Editor
  2. 打开Styles.xml文件,右上角有Open editor按钮,点击打开

左边展示主题修改后的预览结果,右边是主题编辑器窗口,点击小箭头,可以创建一个新的主题控件.

接下来就可以根据下表属性,乱嗨了,不过记得选择完想要的颜色,记住给它起个新名字,不然会覆盖AppTheme默认的颜色

属性 说明
colorPrimary 应用的主色调,ActionBar默认使用该颜色,ToolBar导航栏的底色
colorPrimaryDark 应用的主要暗色调,StatusBar状态栏默认使用改颜色
colorAccent 控件选中的默认颜色,如EditText 的闪动光标
android:colorControlNormal 控件未选中时的默认颜色,如复选框
android:textColorPrimary 应用的主要文字颜色,ActionBar的标题文字默认颜色
android:textColorSecondary 辅助的文字颜色,一般比textColorPrimary的颜色弱一点,用于一些弱化的表示
android:windowBackground 窗体背景颜色,必须用color.xml定义的颜色
android:navigationBarColor 底部操作栏颜色 API>21
扩展属性 扩展说明
statusBarColor 状态栏颜色,默认使用colorPrimaryDark
colorForeground 应用的前景色,ListView的分割线,switch滑动区默认使用该颜色
colorBackground 应用的背景色,popMenu的背景默认使用该颜色
colorControlHighlight 控件按压时的色调
colorControlActivated 控件选中时的颜色,默认使用colorAccent
colorButtonNormal 默认按钮的背景颜色
editTextColor 默认EditView输入框字体的颜色。
textColor Button,textView的文字颜色
textColorPrimaryDisableOnly RadioButton,checkbox等控件的文字
colorSwitchThumbNormal switch thumbs 默认状态的颜色. (switch off)

最后记得在AndroidManifest清单文件,在或添加android:theme,调用我们设置好的主题

总结

本篇文章到此结束,欢迎关注,后续有补充的会即使更新,有问题也欢迎评论,共同成长

样式和主题(Style and Theme)详解相关推荐

  1. Android中的Style、Theme详解已经发展史

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

  2. LDA主题模型(算法详解)

    LDA主题模型(算法详解) http://blog.csdn.net/weixin_41090915/article/details/79058768?%3E 一.LDA主题模型简介 LDA(Late ...

  3. 一定能用到的简单但实用的五种按钮样式(原生HTML+CSS步骤详解,含详细注释)

    前言一   按钮在前端开发中往往是一个必不可少的元素,也有许多精美好看的样式资源供开发者直接使用.但博主认为,对于初学者而言,总是去cv别人做好的,而不理解其中的原理,是很不好的.   本人作为一名计 ...

  4. mapbox-gl的Style文件规范详解

    Mapbox ( 中文官网 )致力于打造全球最漂亮的个性化地图. 这里记录下其 Web 端API Mapbox GL JS 的地图样式规范 Style 的各个配置. 必填项会加上 * ,方便根据目录进 ...

  5. Vue中关于scoped以及scoped样式穿透的原理与使用详解

    1. scoped 当多个组件中有相同的元素或相同的类名时,在其中一个组件中更改该元素的样式,会导致所有组件中的样式更改,造成样式污染,若只想该样式在当前组件生效就需要用到scoped 示例 组件de ...

  6. 【Android】attr、style和theme

    一.Attr 属性,风格样式的最小单元: Attr 的定义 在自定义 View 的时候,在 res/attrs.xml 文件中声明属性,而Android 系统的属性也是以同样的方式定义的. 比如 la ...

  7. html向左箭头样式,详解Bootstrap的纯CSS3箭头按钮样式

    简要教程 这是一款基于Bootstrap的纯CSS3箭头按钮样式.该按钮通过修改原生Bootstrap的按钮样式,来生成指向左侧或右侧的箭头按钮. [相关视频推荐:Bootstrap教程] 安装 可以 ...

  8. ECharts 入门详解

    目录 ECharts配置语法 创建HTML页面 为 ECharts 准备一个具备高宽的 DOM 容器 设置配置信息 相关属性 折线图 饼图 柱状图: 更多图形案例 ECharts样式设置 默认主题 使 ...

  9. android学习笔记---50_样式与主题,给控件使用样式,给应用使用主题

    50_样式与主题 android学习笔记---50_样式与主题,给控件使用样式,给应用使用主题 2013/5/12 50_样式与主题 ----------------- android样式和主题(st ...

最新文章

  1. 让神经网络给符号AI“打工”,MIT和IBM联合解决深度学习痛点,未来将用于自动驾驶...
  2. WSAD5技巧之一:访问Oracle9i数据源
  3. 数据中心运营:内包还是外包?
  4. 1.3 Error和Exception的异同
  5. [云炬商业计划书阅读分享]袜子广告策划方案
  6. laravel5.5使用sendCloud邮件服务
  7. Java并发编程:同步容器
  8. windows找不到文件gpedit.msc_u盘插入电脑在windows却找不到u盘的解决办法【详解】...
  9. html空间登录页面制作,免费HTML网页空间(每月200 GB 流量托管静态网页超简单)...
  10. 定时 监控 shell 服务宕机自动重启,并发送短信通知
  11. 20189320《网络攻防》第八周作业
  12. 关于Gary Marcus与Yann LeCun讨论AI现状及发展
  13. EasyAR4.0使用说明(Unity3D)三----平面图像跟踪扩展:视频播放,涂涂乐
  14. 最长公共子序列(LCS)C++版递归算法实现
  15. 怎么搭建可视化BI数据平台(下)
  16. 浅谈伺服电机三种控制方式
  17. 全网最全Python金融大数据挖掘与分析,基础篇(附源代码,pycharm专业版无限期申请)
  18. 圆极化天线宽带化方法总结
  19. Jarvis OJ平台basic部分wirteup
  20. 如何确定去耦电容的大小?

热门文章

  1. 京东小白如何快速掌握运营技巧
  2. 芒果改进YOLOv7系列:超越ConvNeXt结构,原创结合Conv2Former改进结构,Transformer 风格的卷积网络视觉基线模型,高效涨点
  3. 集五福主题的微信图文排版攻略已到!
  4. linux开发板通过网线连接电脑(win10)连接网络问题
  5. html图片水平镜像翻转
  6. 基于脉振高频电压注入的永磁同步电机无感FOC
  7. as 运行java_解决AndroidStudio无法运行java中的mian方法问题
  8. 电脑网页压力测试软件,网站压力测试工具
  9. traceroute命令详解
  10. 解决vagrant up启动失败,停留在Booting VM...过程的方法