android如何使用DOM来解析XML+如果做一个表情的弹出框
时间:2022-02-24 10:28
效果图:
如何解析以下的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.gxlsystem.com)!