歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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));  
因為太簡單了,所以就沒說太多,希望能幫助到別人,如果不明白...,應該不會吧? 

			
Copyright © Linux教程網 All Rights Reserved