Android 基于Socket发送表情


曾经一度被这个问题困扰了很久,在网上找了N久都没发现好方法,不是太麻烦,就是根本不能实现。

最后的最后终于这个被很可笑的解决的了,之所以可笑是因为我拿这个问题去问别人,那人思索良久,最后还是告诉我不能解决,但是可以提供一个思路,反正我也没办法了,就所幸听他说一下吧,一说果然是都被我试了N次而放弃的方法,但碍于面子就没打他,可是就在我装作很认真的听着的时候,忽然不经意的一句话给了我答案,于是就这么解决了,方法简单的要死,好吧,下面就说说吧

首先我是用ListView显示的聊天内容(我弄的是一个聊天室的的东西),当然这都无所谓,之用一个EditText也OK,

这是我插入表情的对话框,相信不难看懂吧。

  1. public void showImageDialog() {  
  2.         LayoutInflater inflater = LayoutInflater  
  3.                 .from(AndroidClientActivity.this);  
  4.         LinearLayout layout = (LinearLayout) inflater.inflate(  
  5.                 R.layout.dialoglayout, null);  
  6.         AlertDialog.Builder builder = new AlertDialog.Builder(  
  7.                 AndroidClientActivity.this);  
  8.         builder.setTitle("选择表情")  
  9.         .setMessage("要添加的表情")  
  10.         .setView(layout);  
  11.         GridView gv = (GridView) layout.findViewById(R.id.gridview);  
  12.           
  13.         g.simpleAdapter = new SimpleAdapter(AndroidClientActivity.this, list,  
  14.                 R.layout.itemlayout, new String[] { "face" },  
  15.                 new int[] { R.id.itemImageview });  
  16.         gv.setAdapter(g.simpleAdapter);  
  17.         gv.setOnItemClickListener(new OnItemClickListener() {  
  18.             @Override  
  19.             public void onItemClick(AdapterView<?> parent, View view,  
  20.                     int position, long id) {  
  21.                 @SuppressWarnings("unchecked")  
  22.                 HashMap<String, Object> m = (HashMap<String, Object>) parent  
  23.                         .getAdapter().getItem(position);  
  24.                   
  25.                 CharSequence cs = Html.fromHtml("<img src='" + m.get("face")  
  26.                         + "'/>", imageGetter, null);  
  27.                 System.out.println("face-----"+Html.toHtml((Spanned) cs));  
  28.                 int cursor = etMsg.getSelectionStart();  
  29.                 etMsg.getText().insert(cursor,cs);  
  30.                   
  31.             }  
  32.         });  

插入之前需要定义这样一个接口,这个在网上都是可以找到的

  1. ImageGetter imageGetter = new ImageGetter() {  
  2.     @Override  
  3.     public Drawable getDrawable(String source) {  
  4.         int id = Integer.parseInt(source);  
  5.         // 根据id从资源文件中获取图片对象   
  6.             Drawable d = getResources().getDrawable(id);  
  7.     d.setBounds(00, d.getIntrinsicWidth(), d.getIntrinsicHeight());  
  8.       
  9.         return d;  
  10.     }  
  11. };  
这是发送带图片的内容
  1. btnSend.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.         // TODO Auto-generated method stub   
  5.         if (etMsg.getText().toString().equals("")) {  
  6.             Toast.makeText(getApplicationContext(), "发送信息为空",  
  7.                     Toast.LENGTH_SHORT).show();  
  8.             return;  
  9.         }  
  10.         g.content =Html.toHtml(etMsg.getText());//只是将要发送的内容通过Html.toHtml()方法转换了一下格式,可以打印出来看看效果  
if (g.pw != null) {g.pw.println(msg.toString());g.pw.flush();etMsg.setText("");System.out.println("msg: "+msg.toString());msg.delete(0, msg.length());// Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show()}}});
下面就是我在BaseAdapte的getView方法中显示内容 

  1. public View getView(int position, View convertView, ViewGroup parent) {  
  2.     LayoutInflater layoutInflater=LayoutInflater.from(context);  
  3.     convertView=(LinearLayout) layoutInflater.inflate(R.layout.chatitem, null);  
  4.     TextView et = (TextView) convertView.findViewById(R.id.tvChat);  
  5.       
  6.     et.setText(Html.fromHtml(list.get(position), imageGetter, null));  
  7.     return convertView;  
  8.       
  9. }  
如果是直接用EditText显示的话就换成
  1. et.setText(<pre class="java" name="code">et.setText(Html.fromHtml(list.get(position), imageGetter, null));  
是不是很简单啊,其实就是两个方法  

  1. et.setText(Html.fromHtml(list.get(position), imageGetter, null));  
  2. 和  
  3. et.setText(Html.toHtml(list.get(position), imageGetter, null));  
因为太简单了,所以就没说太多,希望能帮助到别人,如果不明白...,应该不会吧? 

相关内容