欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-03-19 18:34:56
...
效果图:

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+如果做一个表情的弹出框 的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关标签: android,DOM,XML