Android开发---如何操作资源目录中的资源文件4

XML,位于res/xml/,这些静态的XML文件用于保存程序的数据和结构。

XmlPullParser可以用于解释xml文件

效果图:

  描述:

    点击按钮,显示图二信息  

1、activity_main.xml

  描述:定义了一个按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="XML资源管理"
android:onClick="test_4"
/>
</LinearLayout>

2、MainActivity.java

  描述:进行了页面跳转

package com.example.android_shaperesoucesdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); }
public void test_4(View view){
Intent intent = new Intent(this,XMLActivity.class);
startActivity(intent);
}
}

3、activity_xml.xml

  描述:

    顶一个TextView全屏显示内容

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_xml"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/showText"
android:textSize="25sp"
/>
</LinearLayout>

4、XMLActivity.java

  描述:

    1、先将定义好的books.xml资源文件加载进来

    2、判断该xml文件是否存在,如果存在,则构建一个具有缓存作用的StringBuffer对象来存储读取到的数据

    3、然后就进行while循环,只要没有检测到END_DOCUMENT,就继续循环

    4、再读取<AAAA bbbb=xxxx c=yyyyy>的内容,判断其中的AAAA是否为null,并且判断有没有检测到START_TAG,如果不是null,且没有检测到START_TAG,那么就将节点名追加缓存中

    5、再获取属性,通过getAttributeCount()获取属性的个数,再通过循环获取属性名称和值,然后也追加到缓存中

    6、再然后则获取其内容,对于<entry>Hello</entry>这种方式,如果要获取中间的数值,则事件为XmlPullParser.TEXT, 可通过getText()来获取内容。内容获取到后也追加到缓存中

    

package com.example.android_shaperesoucesdemo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; public class XMLActivity extends Activity {
private TextView showText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xml); showText = (TextView)findViewById(R.id.showText);
readXML();
}
private void readXML(){
//加载 XML资源文件
XmlPullParser xpp = getResources().getXml(R.xml.books);
if (xpp!=null){
//构建一个StringBuffer对象存储读取到的数据
StringBuffer sb = new StringBuffer();
       //由于xml文件可能书写不正确,或者我们在解释的过程中处理不正确,应当使用异常捕获的方式来处理
try {
          //XmlPullParser通过next(),依次向下检查 
          //XmlPullParser是事件驱动,如果检测到END_DOCUMENT,应当停止继续检测
          //通过循环,逐步解析XML,直至xml文件结束
          while (xpp.getEventType()!=XmlPullParser.END_DOCUMENT){
            //XmlPullParser是事件驱动,当检测到START_TAG,可以读出<AAAA bbbb=xxxx c=yyyyy>的内容,其中AAAA可通过getName()来获取,
            //属性的个数,可通过getAttributeCount()获取,
            //属性的名词和内容可分别通过getAttributeName(index)和getAttributeValue(index)来获取。 
if (xpp.getName()!=null&&xpp.getEventType()!=XmlPullParser.END_TAG){
sb.append("节点名:"+xpp.getName()+"\n\r");
            }
//获取节点有没有属性
            //通过getAttributeCount()来获取属性的个数
int count = xpp.getAttributeCount();
for (int i=0;i<count;i++){
              //通过循环获取属性名称
String attrName = xpp.getAttributeName(i);
              //通过循环获取属性的值
String attrValue = xpp.getAttributeValue(i);
sb.append(attrName+"="+attrValue+"\n\r");
}
            //获取内容
if (xpp.getEventType()==XmlPullParser.TEXT){
sb.append(xpp.getText()+"\n\r");
}
            //通过next(),依次向下检查
xpp.next();
}
          //将缓存中的数据转化成字符串在showText UI中显示出来
showText.setText(sb.toString());
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

5、res资源目录下创建xml包,在xml包中创建books.xml文件

books.xml

<?xml version="1.0" encoding="utf-8"?>
<books>
<book bid = "B0001" price = "50">
<author>涂涂</author>
<name>从入门到放弃</name>
</book>
<book bid = "B0002" price = "50">西游记</book>
<book bid = "B0003" price = "55">Android高级应用</book>
</books>



 xml文件可以用户储存我们的数据,或者作为配置文件等。xml文件可以位于res/xml目录下面,例如我们在该目录下放置一个xml文件words.xml,如下:

<?xml version="1.0" encoding="utf-8"?>
<ListItems desrciption="Put the entry as the item in Android List">
<Entry value="One" />
<Entry value="Two" />
<Entry value="Three" />
<Entry value="Four" />
<Entry value="Five" />
<Entry value="Six" />
<entry>Hello</entry>
</ListItems>

  XmlPullParser可以用于解释xml文件。这里有两种xml的常见格式:<entry>Hello</entry>和<Entry value="Six" />,在Android XML中使用后者,而这种方式在XmlPullParser中处理也非常方便。它的使用方式归纳如下:

  1. XmlPullParser通过next(),依次向下检查
  2. XmlPullParser是事件驱动,如果检测到END_DOCUMENT,应当停止继续检测
  3. XmlPullParser是事件驱动,当检测到START_TAG,可以读出<AAAA bbbb=xxxx c=yyyyy>的内容,其中AAAA可通过getName()来获取,属性的个数,可通过getAttributeCount()获取,属性的名词和内容可分别通过getAttributeName(index)和getAttributeValue(index)来获取。
  4. XmlPullParser是事件驱动,如果是END_TAG,则为</AAAA>,可以通过getName()来获得AAAA的内容
  5. 对于<entry>Hello</entry>这种方式,如果要获取中间的数值,则事件为XmlPullParser.TEXT,可通过getText()来获取内容。
  6. 由于xml文件可能书写不正确,或者我们在解释的过程中处理不正确,应当使用异常捕获的方式来处理

下面的例子,我们将上述的words.xml分析处理,将Entry数值作为listActivity的每个item的内容。

/* 1. XmlPullParser通过next(),依次向下检查
* 2. XmlPullParser是事件驱动,如果检测到 END_DOCUMENT,应当停止继续检测
* 3. XmlPullParser是事件驱动,当检测到START_TAG,可以读出<AAAA bbbb=xxxx c=yyyyy>的内容,其中AAAA可通过getName()来获取,属性的个数,可通过getAttributeCount()获取,属性的名词和内容可分别通过getAttributeName(index)和getAttributeValue(index)来获取。
* 4. XmlPullParser 是事件驱动,如果是END_TAG,则为</AAAA>,可以通过getName()来获得AAAA的内容
* 5. 对于<entry>Hello</entry>这种方式,如果要获取中间的数值,则事件为XmlPullParser.TEXT, 可通过getText()来获取内容。
* 6. 由于xml文件可能书写不正确,或者我们在解释的过程中处理不正确,应当使用异常捕获的方式来处理
*/
public class Chapter20Test3 extends ListActivity{
private ArrayList<String> items = new ArrayList<String>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); /*步骤1:进行特定xml文件words的解析,对应第6点,应采用异常捕获防止程序出错*/
try{
/* 步骤2:获取xml文件,并给给出XmlPullParser对象*/
XmlPullParser xpp = getResources().getXml(R.xml.words);
/* 步骤3:通过循环,逐步解析XML,直至xml文件结束,对应第1点和第2点*/
while(xpp.getEventType()!=XmlPullParser.END_DOCUMENT){
/* 步骤4:获取目标ListItems的解析,并将之用method:ListItems来处理,对应第3点 */
if(xpp.getEventType() == XmlPullParser.START_TAG){
if(xpp.getName().equals("ListItems")){
getItems(xpp);
}
}
xpp.next();
}
}catch(Throwable t){
Toast.makeText(this, "Failed:" + t.toString(), 2000).show();
}
setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items));
} /* 解析<ListItems ... >.... </Listitem>的内容,获取每个entry的value的值,注意对异常的处理*/
private void getItems(XmlPullParser xpp) throws Throwable{
while(true){
xpp.next();
/*<ListItems> ...</ListItems>的内容已经检索完毕,或者文件结束,都退出处理*/
if((xpp.getEventType() == XmlPullParser.END_TAG && xpp.getName().equals("ListItems"))
|| xpp.getEventType() == XmlPullParser.END_DOCUMENT)
break; if(xpp.getEventType()==XmlPullParser.START_TAG) {
/*观测点:对第3点的处理,读出属性的名字和数值*/
if(xpp.getName().equals("Entry")){
for(int i = 0; i < xpp.getAttributeCount() ; i ++){
if(xpp.getAttributeName(i).equals("value")){
items.add(xpp.getAttributeValue(i));
}
}
}
/*观测点:对第5点的处理,处理<name>value</name>*/
if(xpp.getName().equals("entry")){
xpp.next();
if(xpp.getEventType()==XmlPullParser.TEXT)
items.add(xpp.getText());
}
}
} } @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Toast.makeText(this, items.get(position), Toast.LENGTH_LONG).show();
} }

Android开发---如何操作资源目录中的资源文件4 ---访问xml的配置资源文件的内容的更多相关文章

  1. Android开发---如何操作资源目录中的资源文件3--圆角边框、背景颜色渐变效果、边框颜色

    Android开发---如何操作资源目录中的资源文件3 效果图 1.圆角边框 2.背景颜色渐变效果 1.activity_main.xml 描述: 定义了一个shape资源管理按钮 <?xml ...

  2. Android开发 ---如何操作资源目录中的资源文件2

    Android开发 ---如何操作资源目录中的资源文件2 一.颜色资源管理 效果图: 描述: 1.改变字体的背景颜色 2.改变字体颜色 3.改变按钮颜色 4.图像颜色切换 操作描述: 点击(1)中的颜 ...

  3. Android开发 ---如何操作资源目录中的资源文件5 ---Raw资源管理与国际化

    效果图: 1.activity_main.xml 描述: 定义两个按钮,一个是Raw资源管理,一个是处理国际化语言,其中i18n表示简体中文 <?xml version="1.0&qu ...

  4. Android开发第一讲之目录结构和程序的执行流程

    1.如何在eclipse当中,修改字体 下面的这种办法,可以更改xml的字体 窗口--首选项--常规--外观--颜色和字体--基本--文本字体--编辑Window --> Preferences ...

  5. Android开发学习2--Android Studio目录结构、Module目录介绍、Android创建及运行和HelloWord的扩展----极其简单的游戏界面

    学习笔记: 1.Android Studio项目结构 Android Studio提供了很多项目结构,最常用的是Android 和 project Project列举出了所有文件. 建议使用Andro ...

  6. Maven pom.xml 配置说明: 打jar包不包括指定资源文件和.class xml,配置不跑testCase,建pom父子项目

    **maven如何配置打jar包时,一些class 或者资源文件不打进来,把classpath的xml文件打进jar <build> <!--针对资源文件--> <res ...

  7. Android开发---如何操作资源目录中的资源文件

    效果图: 1.activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...

  8. Android开发 ---多线程操作:Handler对象,消息队列,异步任务下载

    效果图: 1.activity_main.xml 描述:定义了六个按钮 <?xml version="1.0" encoding="utf-8"?> ...

  9. 【Android】源码external/目录中在编译过程中生成的文件列表

    => external/eyes-free:   accessibilityvalidator.jar (host,share) => external/mesa3d:   libMesa ...

随机推荐

  1. Spring Batch 使用场景

    一个标准的批处理程序通常会从数据库,文件或者队列中读取大量的数据和记录,然后对获取的数据进行处理,然后将修改后的格式写回到数据库中. 通常 Spring Batch 在离线模式下进行工作,不需要用户干 ...

  2. vue 基础(二)

    Vue对象提供的属性功能 一.过滤器 过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中. 1. 全局过滤器 Vue.filter 写在vm 对象外.必须要有 ...

  3. php 路途一点启示

    wo:  面试了很多说后台不适合女孩,我不相信,而且我还很笨 he:不是立马就能让别人认可你,其中过程要经历很多得,有时候也要换个方式的'' wo: 我只是想用学的知识得到实践 he:那学习的过程不是 ...

  4. 『计算机视觉』Mask-RCNN_推断网络其三:RPN锚框处理和Proposal生成

    一.RPN锚框信息生成 上文的最后,我们生成了用于计算锚框信息的特征(源代码在inference模式中不进行锚框生成,而是外部生成好feed进网络,training模式下在向前传播时直接生成锚框,不过 ...

  5. ie8不支持currentTarget的解决办法

    一般绑定事件时,我们都会在事件回调方法里用event.currentTarget获取当前对象,但到ie8里就获取不到了. 解决方法如下: var eve = event || window.event ...

  6. leetcode-algorithms-19 Remove Nth Node From End of List

    leetcode-algorithms-19 Remove Nth Node From End of List Given a linked list, remove the n-th node fr ...

  7. Leetcode 1006. 笨阶乘

    1006. 笨阶乘  显示英文描述 我的提交返回竞赛   用户通过次数305 用户尝试次数347 通过次数309 提交次数665 题目难度Medium 通常,正整数 n 的阶乘是所有小于或等于 n 的 ...

  8. WebSphere部署应用教程

    在WebSphere中应用是部署在“应用程序服务器”,而“应用程序服务器”建立在“节点”上 所以部署应用的几个前提是:要创立好受控server(亦即节点)并加入到控制台中且处于启动(亦即同步)状态:要 ...

  9. windows的网上邻居

    要说以前中学最怕上什么课就是电脑课,要说电脑印象最深的是什么软件就是总摆在桌面又听不懂又点进去什么都没有的“网上邻居”. “网上邻居”指的是同一局域网内在线的的电脑,更简单些就是连在同一路由器中开机的 ...

  10. JSP开发Web应用系统

    1.动态网站开发基础 1-1:动态网页 a.为什么需要动态网页(当我们需要修改网页内容的时候,都要重新上传一次覆盖原来的页面.而且,制作必须要通过专用的网页制作工具,比如:Dreamweaver.Fr ...