样式(Style)和主题(Theme)资源——主题资源
与样式资源非常相似,主题资源的XML文件通常也放在/res/values 目录下,主题资源的XML文档同样以<resources.../>元素作为根元素,同样使用<style.../>元素来定义主题。
主题与样式的区别主要体现在:
- 主题不能作用于单个的View组件,主体应该对整个应用的所有Activity起作用,或对指定的Activity起作用。
- 主题定义的格式应该是改变窗口外观的格式,例如窗口标题、窗口边框等。
实例:给所有窗口添加边框、背景
下面通过一个示例来介绍主题的用法。为了给所有的窗口都添加边框、背景,先在/res/values/my_new_style.xml文件中增加一个主题,定义主体的<style.../>片段如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CrazyTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowFrame">@drawable/window_border</item>
<item name="android:windowBackground">@drawable/star</item>
</style>
</resources>
上面的主题定义中使用了两个Drawable资源,其中@drawable/star是一张图片;@drawable/window_border是一个ShapeDrawable资源,该资源对应的XML文件代码如下:
\res\drawable_mdpi\wndow_border.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- 设置填充颜色 -->
<solid android:color="#0fff"/>
<!-- 设置四周的内边距 -->
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp"/>
<!-- 设置边框 -->
<stroke android:width="10dip" android:color="#f00"/>
</shape>
定义了上面主题之后,接下来即可在Java代码中使用该资源,例如如下代码:
package com.example.studyresources; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu; public class StyleResTest extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.CrazyTheme);
setContentView(R.layout.activity_style_res_test);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.style_res_test, menu);
return true;
} }
大部分时候,在AndroidManifest.xml文件中对指定应用、指定Activity应用主题更加简单。如果我们想让应用中全部窗口使用该主题,只要为<application.../>元素增加android:theme属性。属性是一个主题的名字,如以下代码所示:
<application android:theme="@style/CrazyitTheme">
...
</application>
如果你只想让程序中的某个Activity拥有这个主题,那么你可以修改<activity.../>元素,同样通过android:theme指定主题即可。
本应用在代码中指定使用的样式,运行可看到如图6.11所示的界面。

从图6.11所示的效果可以看出,该窗口没有标题,窗口背景也被改变了,窗口全屏显示......这些都是自定义主题控制的。
Android中提供了几种内置的主题资源,这些主题通过查询Android.R.style类可以看到。
例如前面介绍的对话框风格的窗口,我们只要采用如下代码来定义某个Activity即可。
<application android:theme="@android:style/Theme.Dialog">
...
</application>
与样式类似的是,Android主题同样支持继承。如果开发过程中还想利用某个主题,但需要对它们进行布局修改,则可通过继承系统主题来实现自定义主题。例如如下代码片段:
<style name="CrazyTheme" parent="@android:style/Theme.Dialog">
...
</style>
上面定义的CrazyTheme主题继承了android.R.style.Theme.Dialog主题,那么接下来在该<style.../>元素中添加<item.../>子元素就可覆盖系统主题的部分属性了。
样式(Style)和主题(Theme)资源——主题资源的更多相关文章
- 第十四章:样式(Style)和主题(Theme)
简介 Android的样式(Style)和主题(Theme)文件就好比WEB开发中的CSS一样,可以实现UI界面的风格统一管理,这和Windows平台的XAML格式(Silverlight.WPF)类 ...
- Android 自定义属性(attrs)、样式(Style)、主题(Theme)
Android 自定义属性(attrs).样式(Style).主题(Theme) https://www.cnblogs.com/dandre/p/4507024.html https://blog. ...
- Android 样式 (style) 和主题(theme)
转载:https://gold.xitu.io/post/58441c48c59e0d0056a30bc2 样式和主题 样式是指为 View 或窗口指定外观和格式的属性集合.样式可以指定高度.填充.字 ...
- Android样式(style)和主题(theme)
样式和主题 样式是指为 View 或窗口指定外观和格式的属性集合.样式可以指定高度.填充.字体颜色.字号.背景色等许多属性. 样式是在与指定布局的 XML 不同的 XML 资源中进行定义. Andro ...
- 20.(转)Android的样式(Style)和主题(Theme)
Android上的Style分为了两个方面: 1,Theme是针对窗体级别的,改变窗体样式: 2,Style是针对窗体元素级别的,改变指定控件或者Layout的样式. Android系统的themes ...
- android的样式(style)与主题(theme)
Android上的Style分为了两个方面: 1,Theme是针对窗体级别的,改变窗体样式: 2,Style是针对窗体元素级别的,改变指定控件或者Layout的样式. Android系统的themes ...
- 安卓样式Style和主题Theme
1. 区别 不过style是针对view来说的,比如TextView和EditText这些:而Theme必须针对整个activity或者整个application 2. 样式 创建一个样式,根元素 & ...
- 样式styles和主题theme
参考资料:http://blog.csdn.net/sshhbb/article/details/7219838/ /values/styles.xml <resources> <! ...
- Android菜鸟的成长笔记(6)——剖析源码学自定义主题Theme
原文:Android菜鸟的成长笔记(6)--剖析源码学自定义主题Theme 还记得在Android菜鸟的成长笔记(3)中我们曾经遇到了一个问题吗?"这个界面和真真的QQ界面还有点不同的就是上 ...
- Android下Notification,样式style,主题theme的功能实现
一:Notification 1.NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVIC ...
随机推荐
- android使用support的ActionBar时遇到的问题
多从网上下载好了support library之后,把android-support-v7-appcompat.jar放到了libs目录下,并加入到了编译路径,本以为万事大吉,可是却报了下面的一个错误 ...
- 树列复选框Extjs
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- c#动态生成word,在本地可以执行,但发布到iis上出错解决方案
报错点: Microsoft.Office.Interop.Word.DocumentClass.SaveAs 解决方案: 1.在"开始"->"运行"中输 ...
- STM32开发指南-蜂鸣器实验
另一种I/O作为输出的应用,利用一个I/O来控制板载的有源蜂鸣器,实现蜂鸣器控制. PS:有源蜂鸣器自带了震荡电路,一通电就会发声:无源蜂鸣器则没有自带震荡电路,必须外部提供2~5Khz左右的方波驱动 ...
- SystemUI简介
http://wenku.baidu.com/link?url=p9hBaL4tmc6Z6fAxar23459qPEv3EqDBCW71SmdrphTA0vU02ZWVayNkEItvkP1WSk4L ...
- javascript 中获取对象的长度(map对象的长度)--js关联数组的长度
var n = {1:100, 2:101, 3:102, 4:103}; 怎么获取这个对象n的长度呢? 方法一: function getLength(obj){ var count = 0; fo ...
- scrollView顶部空白
在iOS7之后,苹果会自动给导航控制器里面的所有UIScrollView顶部都会添加额外的滚动区域64.
- USACO Section 1.1 Greedy Gift Givers 解题报告
题目 问题描述 有若干个朋友,朋友之间可以选择互相赠送一些有价值的礼物.一个人可以选择将一部分钱分给若干个朋友,例如某人送给其他两个人钱,总共赠送3元,两个人平均分,原本应该是每人1.5元,但是只能取 ...
- hibernate---一对一单向外键关联--XML
Student.java: package com.bjsxt.hibernate; public class Student { private int id; private String nam ...
- Spring自学教程-AOP学习(五)
Spring中的AOP 一.概述 (一)基本概念 1.什么是AOP? 面向方面编程.所谓方面即是指日志.权限.异常处理.事务处理等. 2.AOP的3个关键概念 (1)切入点(Pointc ...