android如何使用DOM来解析XML+如果做一个表情的弹出框

效果图:

如何解析以下的xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<array>
	<string>(#大笑)</string>
	<string>(#微笑)</string>
	<string>(#亲亲)</string>
	<string>(#抱抱)</string>
	<string>(#色色)</string>
	<string>(#好失望哟)</string>
</array>

这样来解析:

public class MessageFaceModel {

	/** single instance of this class */
	private static MessageFaceModel instance = null;

	/** context */
	private boolean mInitialized = false;

	private HashMap<String,Bitmap> mFaceMap = new HashMap<String,Bitmap>();

	private ArrayList<String> mFaceStrings = new ArrayList<String>();

	private ArrayList<Bitmap> mFaceIcons = new ArrayList<Bitmap>();

	/**
	 * constructor
	 */
	private MessageFaceModel(){

	}

	/**
	 * Factory method
	 */
	public static synchronized MessageFaceModel getInstance(){
		if(instance == null){
			instance = new MessageFaceModel();
		}
		return instance;
	}

	/**
	 * initialize face data
	 */
	public void init(Context context){
		if(mInitialized){
			//initialize only once
			return;
		}

		mFaceMap.clear();
		mFaceStrings.clear();
		mFaceIcons.clear();

		AssetManager assetManager = context.getAssets();
		ArrayList<String> faces = new ArrayList<String>();
		DocumentBuilderFactory docBuilderFactory = null;
		DocumentBuilder docBuilder = null;
		Document doc = null;
		try {
			docBuilderFactory = DocumentBuilderFactory.newInstance();
			docBuilder = docBuilderFactory.newDocumentBuilder();
			doc = docBuilder.parse(assetManager.open("MessageFace.xml"));
			Element root = doc.getDocumentElement();
			NodeList nodeList = root.getElementsByTagName("string");
			for(int i =0;i< nodeList.getLength();i++)
			{
				Node node = nodeList.item(i);
				String s = "";
				NodeList list = node.getChildNodes();
				if(list != null){
					for(int j = 0; j < list.getLength(); j++){
						s += list.item(j).getNodeValue();
					}
				}
				faces.add(s);
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			doc = null;
			docBuilder = null;
			docBuilderFactory = null;

		}

		int i;
		for(i = 0; i < faces.size(); ++i){
			int index = i + 1;
			int id = context.getResources().getIdentifier(
                    "msgface_" + index,
                    "drawable", "com.example.tianqitongtest");
			try {
				Bitmap bm =  BitmapFactory.decodeResource(context.getResources(),id);
				mFaceMap.put(faces.get(i), bm);
				mFaceStrings.add(faces.get(i));
				mFaceIcons.add(bm);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		mInitialized = true;

	}

	public ArrayList<Bitmap> getFaceIcons(){
		return mFaceIcons;
	}

	public ArrayList<String> getFaceStrings(){
		return mFaceStrings;
	}

	public Bitmap getFaceIcon(String face){
		if(mFaceMap != null){
			return mFaceMap.get(face);
		}else{
			return null;
		}
	}

	public void clear() {
		mInitialized = false;
		mFaceMap.clear();
		mFaceStrings.clear();
		mFaceIcons.clear();
	}
}

然后写这个Dialog样式的activity:

  <activity android:name=".InputFaceActivity"
   		 	 android:theme="@android:style/Theme.Dialog"
   			 android:configChanges="keyboardHidden|orientation">
   		 </activity>

Layout是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="300dp"
  android:minHeight="100dp"
  android:background="#EFEFEF">
  <GridView
	  xmlns:android="http://schemas.android.com/apk/res/android"
	  android:id="@+id/input_face_gridview"
	  android:layout_width="fill_parent"
	  android:layout_height="wrap_content"
	  android:layout_marginLeft="18dp"
	  android:layout_marginRight="10dp"
	  android:layout_marginTop = "18dp"
	  android:layout_marginBottom = "30dp"
	  android:numColumns="auto_fit"
	  android:horizontalSpacing="10dp"
	  android:verticalSpacing="15dp"
	  android:columnWidth="50dp"
	  android:stretchMode="columnWidth"
	  android:gravity="center"
	  android:layout_weight="1.0">
  </GridView>

  <LinearLayout
	  xmlns:android="http://schemas.android.com/apk/res/android"
	  android:layout_width="fill_parent"
	  android:layout_height="wrap_content">
	  <Button
	  	  android:id="@+id/input_face_cancel_button"
		  android:layout_width="wrap_content"
		  android:layout_height="wrap_content"
		  android:background="@drawable/cancel_button_style">
	  </Button>
  </LinearLayout>
</RelativeLayout>
public class InputFaceActivity extends Activity{

    private MessageFaceModel mMessageFaceModel = MessageFaceModel.getInstance();
	public static final int SELECT_STATE_FACE_ICON = 209;
	public static final int SELECT_MESSAGE_FACE_ICON = 109;
	private int mWidth = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		mWidth = this.getResources().getDimensionPixelSize(R.dimen.image_width);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
							 WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
		setContentView(R.layout.input_face_activity);
		GridView gridView = (GridView) findViewById(R.id.input_face_gridview);
		gridView.setAdapter(new FaceListAdapter());
		gridView.setOnItemClickListener(new FaceListOnItemClickListener());

		Button cancelButton = (Button)findViewById(R.id.input_face_cancel_button);
		cancelButton.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View arg0) {
				finish();
			}

		});

	}

	private class FaceListAdapter extends BaseAdapter {

		public int getCount() {
			if(mMessageFaceModel.getFaceIcons() != null){
				return mMessageFaceModel.getFaceIcons().size();
			}else{
			return 0;
			}
		}

		public Object getItem(int arg0) {
			return arg0;
		}

		public long getItemId(int arg0) {
			return arg0;
		}

		public View getView(int position, View convertView, ViewGroup parent) {

			ImageView view = new ImageView(InputFaceActivity.this);
			view.setImageBitmap(mMessageFaceModel.getFaceIcons().get(position));

			view.setLayoutParams(new GridView.LayoutParams(mWidth, mWidth));
			view.setScaleType(ScaleType.CENTER);
			return view;
		}

	}

}

android如何使用DOM来解析XML+如果做一个表情的弹出框

时间: 2024-10-05 05:02:05

android如何使用DOM来解析XML+如果做一个表情的弹出框的相关文章

android如何使用DOM来解析XML文件

对于以下的xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <books> <book email="zhoujunhui&quo

Android开发学习---使用XmlPullParser解析xml文件

Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将主要介绍pull解析器解析xml文件,环境为ubuntu 12.04+ intelij 13.1 + android sdk 2.1 一.创建一个XML项目,步骤如下: 二.解析一个xml文件: assets/person.xml <?xml version="1.0" encodi

DOM方式解析xml文件查看天气

1.步骤: ①创建文档解析器的工厂对象 ②得到文档解析器对象 ③获取输入流对象 ④通过解析器的parse方法解析is对象 转换成Document对象 ⑤返回的是文档的根节点 ⑥判断是否有孩子节点进行获取子节点转换成元素节点得到属性节点 ⑦得到具体的某个属性节点 2.解析元素节点.属性节点.文本节点: 3.界面搭建 界面搭建的相关代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android网络编程之pull解析xml

android网络编程之pull解析xml 除了前面介绍过的SAX以及DOM方法,还可以通过Pull对xml文档进行一个解析.Pull解析器的解析方式与SAX非常相似.它提供了类似的事件,使用parser.next()可以进入下一元素并触发相应事件,事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行选择,然后进行相应的处理,调用parser.nextText()方法可以获取下一个Text类型元素的值. pull解析器特点: *结构简单:一个接口.一个例外.一个工厂就组成了P

XML引入,DOM 方式解析XML 原理,SAX 方式解析XML

XML 简介 Xml(eXtensible Markup Language) 即可扩展标记语言.提供了一套跨平台.跨网络.跨程序的语言的数据描述方式,使用XML 可以方便地实现数据交换.系统配置.内容管理等常见功能. 元素VS 节点 节点包括元素节点.属性节点.文本节点:元素一定是节点,但是节点不一定是元素: <?xml version="1.0" encoding="UTF-8"?> <emp> <empName empNo=&quo

通过Dom方式解析xml文件

此项目通过简单的天气情况显示来实现xml文件的解析 1. 搭建环境 1)创建如下图的包.类及文件 2)布局文件的大概样式如下图所示,用到四个TextView控件和一个RadioGroup控件 3)china.xml文件的内容如下 <?xml version="1.0" encoding="UTF-8"?> <china dn="day"> <city cityname="南京" pyName=&q

QT开发(四十二)——DOM方式解析XML

QT开发(四十二)--DOM方式解析XML 一.DOM简介 1.DOM简介 DOM是Document Object Model的简写,即XML文档对象模型,是由W3C提出的一种处理XML文档的标准接口. DOM 一次性读入整个XML文档,在内存中构造为一棵树(DOM树)将XML文件表示成一棵树,便于随机访问其中的节点,但消耗内存相对多一些.能够在这棵树上进行导航,比如移动到下一节点或者返回上一节点,也可以对这棵树进行修改,或者是直接将这颗树保存为硬盘上的一个 XML 文件. 2.XML DOM节

在iOS 开发中用GDataXML(DOM方式)解析xml文件

因为GDataXML的内部实现是通过DOM方式解析的,而在iOS 开发中用DOM方式解析xml文件,这个时候我们需要开启DOM,因为ios 开发中是不会自动开启的,只有在mac 开发中才自动开启的.我们需要做如下配置: 当配置玩这个操作之后,再次进行编译的时候,系统还是报错,是因为我们还需要进行如下操作:

XML —— DOM方式解析XML

1. DOM 方式解析 XML 原理 基于 DOM(Document Object Model,文档对象模型)解析方式,是把整个 XML 文档加载到内存,转化成 DOM 树,因此应用程序可以随机的访问 DOM 树的任何数据: 优点:灵活性强,速度快: 缺点:消耗资源比较多: 2. 元素 VS 节点 ( 节点包含元素 ) 节点包括元素节点.属性节点.文本节点 <!-- students.xml --><?xml version="1.0" encoding="