曾經一度被這個問題困擾了很久,在網上找了N久都沒發現好方法,不是太麻煩,就是根本不能實現。
最後的最後終於這個被很可笑的解決的了,之所以可笑是因為我拿這個問題去問別人,那人思索良久,最後還是告訴我不能解決,但是可以提供一個思路,反正我也沒辦法了,就所幸聽他說一下吧,一說果然是都被我試了N次而放棄的方法,但礙於面子就沒打他,可是就在我裝作很認真的聽著的時候,忽然不經意的一句話給了我答案,於是就這麼解決了,方法簡單的要死,好吧,下面就說說吧
首先我是用ListView顯示的聊天內容(我弄的是一個聊天室的的東西),當然這都無所謂,之用一個EditText也OK,
這是我插入表情的對話框,相信不難看懂吧。
- public void showImageDialog() {
- LayoutInflater inflater = LayoutInflater
- .from(AndroidClientActivity.this);
- LinearLayout layout = (LinearLayout) inflater.inflate(
- R.layout.dialoglayout, null);
- AlertDialog.Builder builder = new AlertDialog.Builder(
- AndroidClientActivity.this);
- builder.setTitle("選擇表情")
- .setMessage("要添加的表情")
- .setView(layout);
- GridView gv = (GridView) layout.findViewById(R.id.gridview);
-
- g.simpleAdapter = new SimpleAdapter(AndroidClientActivity.this, list,
- R.layout.itemlayout, new String[] { "face" },
- new int[] { R.id.itemImageview });
- gv.setAdapter(g.simpleAdapter);
- gv.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- @SuppressWarnings("unchecked")
- HashMap<String, Object> m = (HashMap<String, Object>) parent
- .getAdapter().getItem(position);
-
- CharSequence cs = Html.fromHtml("<img src='" + m.get("face")
- + "'/>", imageGetter, null);
- System.out.println("face-----"+Html.toHtml((Spanned) cs));
- int cursor = etMsg.getSelectionStart();
- etMsg.getText().insert(cursor,cs);
-
- }
- });
插入之前需要定義這樣一個接口,這個在網上都是可以找到的
- ImageGetter imageGetter = new ImageGetter() {
- @Override
- public Drawable getDrawable(String source) {
- int id = Integer.parseInt(source);
- // 根據id從資源文件中獲取圖片對象
- Drawable d = getResources().getDrawable(id);
- d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
-
- return d;
- }
- };
這是發送帶圖片的內容
- btnSend.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- if (etMsg.getText().toString().equals("")) {
- Toast.makeText(getApplicationContext(), "發送信息為空",
- Toast.LENGTH_SHORT).show();
- return;
- }
- 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方法中顯示內容
- public View getView(int position, View convertView, ViewGroup parent) {
- LayoutInflater layoutInflater=LayoutInflater.from(context);
- convertView=(LinearLayout) layoutInflater.inflate(R.layout.chatitem, null);
- TextView et = (TextView) convertView.findViewById(R.id.tvChat);
-
- et.setText(Html.fromHtml(list.get(position), imageGetter, null));
- return convertView;
-
- }
如果是直接用EditText顯示的話就換成
- et.setText(<pre class="java" name="code">et.setText(Html.fromHtml(list.get(position), imageGetter, null));
是不是很簡單啊,其實就是兩個方法
- et.setText(Html.fromHtml(list.get(position), imageGetter, null));
- 和
- et.setText(Html.toHtml(list.get(position), imageGetter, null));
因為太簡單了,所以就沒說太多,希望能幫助到別人,如果不明白...,應該不會吧?