曾经一度被这个问题困扰了很久,在网上找了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());//只是将要发送的内容通过
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方法中显示内容Html.toHtml()方法转换了一下格式,可以打印出来看看效果
如果是直接用EditText显示的话就换成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; }
et.setText(
; 是不是很简单啊,其实就是两个方法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));
因为太简单了,所以就没说太多,希望能帮助到别人,如果不明白...,应该不会吧?