歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 基於Socket發送表情

Android 基於Socket發送表情

日期:2017/3/1 10:29:20   编辑:Linux編程
曾經一度被這個問題困擾了很久,在網上找了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. g.simpleAdapter = new SimpleAdapter(AndroidClientActivity.this, list,
  13. R.layout.itemlayout, new String[] { "face" },
  14. new int[] { R.id.itemImageview });
  15. gv.setAdapter(g.simpleAdapter);
  16. gv.setOnItemClickListener(new OnItemClickListener() {
  17. @Override
  18. public void onItemClick(AdapterView<?> parent, View view,
  19. int position, long id) {
  20. @SuppressWarnings("unchecked")
  21. HashMap<String, Object> m = (HashMap<String, Object>) parent
  22. .getAdapter().getItem(position);
  23. CharSequence cs = Html.fromHtml("<img src='" + m.get("face")
  24. + "'/>", imageGetter, null);
  25. System.out.println("face-----"+Html.toHtml((Spanned) cs));
  26. int cursor = etMsg.getSelectionStart();
  27. etMsg.getText().insert(cursor,cs);
  28. }
  29. });

插入之前需要定義這樣一個接口,這個在網上都是可以找到的

  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(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
  8. return d;
  9. }
  10. };
這是發送帶圖片的內容
  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. et.setText(Html.fromHtml(list.get(position), imageGetter, null));
  6. return convertView;
  7. }
如果是直接用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. et.setText(Html.toHtml(list.get(position), imageGetter, null));
因為太簡單了,所以就沒說太多,希望能幫助到別人,如果不明白...,應該不會吧? 

			
Copyright © Linux教程網 All Rights Reserved