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

效果图:

27fa6c6c305c834ed2ba0bc95d7b8b87.png

如何解析以下的xml:

(#大笑)

(#微笑)

(#亲亲)

(#抱抱)

(#色色)

(#好失望哟)

这样来解析:

public class MessageFaceModel {

/** single instance of this class */

private static MessageFaceModel instance = null;

/** context */

private boolean mInitialized = false;

private HashMap mFaceMap = new HashMap();

private ArrayList mFaceStrings = new ArrayList();

private ArrayList mFaceIcons = new ArrayList();

/**

* 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 faces = new ArrayList();

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 getFaceIcons(){

return mFaceIcons;

}

public ArrayList 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:

android:theme="@android:style/Theme.Dialog"

android:configChanges="keyboardHidden|orientation">

Layout是:

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="300dp"

android:minHeight="100dp"

android:background="#EFEFEF">

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">

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:id="@+id/input_face_cancel_button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@drawable/cancel_button_style">

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)!

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一直以来都比较羡慕那些,界面美观,功能强大的即时通讯软件,自己慢慢摸索了好长时间,用MFC一个聊天程序主窗口演示小程序。 该程序主要自定义了CRichEditCtrl控件,使用XML技术与GDI处理各种图片及QQ表情组件,串行化数据等,使得程序拥有了一般聊天程序应用的特色(同时仿FeiQ程序的自动释放程序运行需要的资源到安装目录): 支持字体设置、图文混排、表情及各种格式图片的插入、发送与保存,聊天记录的保存等等... 1、聊天输入、输出窗口:使用CRichEditCtrl控件,扩展后方便了字体设置、图文混排、表情及各种格式图片的插入,及窗口上右键菜单的功能。 2、聊天表情:这一部分是我精心制作的,使用GDI处理各种图片使得程序支持各种格式图片的预览、插入、保存。使用XML技术,方便快捷管理表情数据。自动释放表情图片资源(程序所在目录)及QQ表情组件(放到\System32\ImageOle.dll),程序自动注册组件,让程序支持GIF格式表情的插入。程序仿FeiQ自动生成表情页面缓存图片,快捷增加大量表情。本程序生成缓存图时,使用多线程技术,增加、修改完后立即更新页面缓存图,几千张图片,马上生成完成。 3、表情管理:支持表情的添加、删除、修改,移动,导入、导出表情库等,修改完后自动删除需要更新的页面缓存图,及程序程序无关的文件等。 4、聊天记录:使用串行化数据技术,将聊天记录生成到Log.dat文件中,可分页浏览记录。 本程序本人精心制件,最近一段时间在弄一个即时通讯软件,程序马上完工,完工后立即上传,由于弄程序花了不少精力,出于私心暂时不公布了。。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值