第88页
主题资源定义完成后,就可以使用该主题了。在Android中,提供了以下两种使用主题资源的方法。
[√]在AndroidManifest.xml文件中使用主题资源
在AndroidManifest.xml文件中使用主题资源比较简单,只需要使用android:theme属性指定要使用的主题资源即可。例如,要使用名称为bg的主题资源,可以使用下面的代码:
android:theme="@style/bg"
android:theme属性是AndroidManifest.xml文件中标记和标记的共有属性,如果要使用的主题资源作用于项目中的全部Activity上,可以使用标记的android:theme属性,也就是为标记添加android:theme属性,关键代码如下:
…
如果要使用的主题资源作用于项目中的指定Activity上,那么可以在配置该Activity时,为其指定android:theme属性,关键代码如下:
…
说明: 在Android应用中,android:theme属性值还可以使用Android SDK提供的一些主题资源,这些资源我们只需使用即可。例如,使用android:theme="@android:style/Theme.NoTitleBar"后,屏幕上将不显示标题栏。
[√]在Java文件中使用主题资源
在Java文件中也可以为当前的Activity指定使用的主题资源,这可以在Activity的onCreate()方法中通过setTheme()方法实现,例如,下面的代码就是指定当前Activity使用名称为bg的主题资源。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.bg);
setContentView(R.layout.main);
}
注意: 在Activity的onCreate()方法中设置使用的主题资源时,一定要在为该Activity设置布局内容前设置(也就是在setContentView()方法之前设置),否则将不起作用。
使用bg主题资源后,运行默认的MainActivity时,屏幕的背景不再是默认的黑色,而是如图8.12所示的图片。
图8.12 更改主题的MainActivity的运行结果
8.8 原始XML资源
教学录像:光盘\TM\lx\8\原始XML资源.exe
在定义资源文件时,使用的也是XML文件,这些文件不属于本节要介绍的原始XML资源。这里所说的原始XML资源,是指一份格式良好的、没有特殊要求的普通XML文件。它一般保存在res\xml目录(在创建Android项目时,没有自动创建xml目录,需要手动创建)中,通过Resources.getXml()方法来访问。
下面通过一个具体的实例来介绍如何使用原始XML资源。
例8.5 在Eclipse中创建Android项目,名称为8.5,实现从保存客户信息的XML文件中读取客户信息并显示。(实例位置:光盘\TM\sl\8\8.5)
(1)修改新建项目的res\layout目录下的布局文件main.xml,为默认添加的TextView组件设置文字大小、id属性以及默认显示的文本,关键代码如下:
android:id="@+id/show"
android:textSize="28px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="正在读取XML文件..." />
(2)在res目录中,创建一个名称为xml的目录,然后在该目录中创建一个名称为customers.xml的文件,在该文件中,添加一个名称为customers的根节点,并在该节点中添加3个customer子节点,用于保存客户信息。customers.xml文件的具体代码如下:
(3)打开默认创建的MainActivity,在onCreate()方法中,首先获取XML文档,然后通过while循环(循环的条件是不能到文档的结尾)对该XML文档进行遍历,在遍历时,首先判断是否为指定的开始标记,如果是则获取各属性,否则遍历下一个标记,一直遍历到文档的结尾,最后获取显示文本框,并将获取的结果显示到该文本框中。关键代码如下:
XmlResourceParser xrp=getResources().getXml(R.xml.customers); //获取XML文档
StringBuilder sb=new StringBuilder(""); //创建一个空的字符串构建器
try {
//如果没有到XML文档的结尾处
while(xrp.getEventType()!=XmlResourceParser.END_DOCUMENT){
if(xrp.getEventType()==XmlResourceParser.START_TAG){ //判断是否为开始标记
String tagName=xrp.getName(); //获取标记名
if(tagName.equals("customer")){ //如果标记名是customer
sb.append("姓名:"+xrp.getAttributeValue(0)+" "); //获取客户姓名