效果图:


如何解析以下的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 oncereturn;}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 blocke.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 blocke.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;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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(){@Overridepublic 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)!

更多相关文章

  1. 详细介绍使用XML资源文件来定义颜色,样式等
  2. 使用CSS样式表格式化XML文档的详情介绍
  3. jQuery自定义样式下拉框,支持分组、多选和搜索
  4. 如何用Python快速优雅的批量修改Word文档样式?
  5. Pandas也能修改样式?快速给你的数据换个Style!
  6. 如何用自己喜欢的 CSS 风格重置网站的样式[每日前端夜话0x44]
  7. jQuery编程基础精华02(属性、表单过滤器,元素的each,表单选择器,子元
  8. 如何使用特定样式获取jquery中的第一个和最后一个值?
  9. JQuery属性与样式――.val()和增加样式.addClass()

随机推荐

  1. c语言提供的合法的数据类型关键字是什么
  2. 用c语言编写的程序需要用什么程序翻译后
  3. strncmp函数用法是什么
  4. c程序的执行是从什么开始到什么结束?
  5. c语言如何求最大值
  6. c语言提供的合法的数据类型关键字是什么?
  7. 对c语言的认识和想法是什么
  8. c语言console.WriteLine什么意思?
  9. c语言中要求对变量作强制定义的主要理由
  10. c语言大小写字母怎么转化?