zoukankan      html  css  js  c++  java
  • Android表情功能

    Android表情功能

    标签(空格分隔): 未分类


    转载自:android edittext插入表情(基于socket方式),并对文中不正确的内容进行整理和修正

    涉及知识点:

    1、在EditText光标处插入一个表情

    ImageGetter imageGetter = new ImageGetter() {
    	public Drawable getDrawable(String source) {
    		int id = Integer.parseInt(source);
    		Drawable d = getResources().getDrawable(id);
    		d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    		return d;
    	}
    };
    // 我们先实例化一个ImageGetter,ImageGetter是什么大家自己查查,
    // 这里可以理解为通过它可以把edittext里面的html标签替换为图片的一个方法
    // 然后通过Html.fromHtml把它转换成文本格式
    // Emoji.DATA[position]的意思是从表情ID集合(Emoji.DATA)中取得第position个元素
    CharSequence cs = Html.fromHtml("<img src='" + Emoji.DATA[position]+ "'/>", imageGetter, null);
    // 在光标处插入一个表情符
    editText.getText().insert(editText.getSelectionStart(), cs);
    Log.i(TAG, "内容:" + filterHtml(Html.toHtml(editText.getText())));
    

    2、过滤EditText的内容

    现在要是你打印出EditTexttext里面肯定有个OBJ的小图标,我们发出去后也是显示那个样子,我们是要通过socket发出去的,所以我们不能直接发送editText.getText()的值,这时候我们需要用一个方法过滤一下才能发,我们还需要一个方法 如下:

    public static String filterHtml(String str) {
        str = str.replaceAll("<(?!br|img)[^>]+>", "").trim();
        return unicodeToGBK2(str);
    }
    

    这就是把ediTtext的内容过滤,除了<br>标签和<img>标签,其他都去掉后的内容,现在就可以发送啦。注意:有些可能发送后就会出现#&62137;这样编码的内容(中文),需要再转码一下,转码的方法也给大家贴上 如下:

    public static String unicodeToGBK2(String s) {
    	String[] k = s.split(";");
    	String rs = "";
    	for (int i = 0; i < k.length; i++) {
    		int strIndex = k[i].indexOf("&#");
    		String newstr = k[i];
    		if (strIndex > -1) {
    			String kstr = "";
    			if (strIndex > 0) {
    				kstr = newstr.substring(0, strIndex);
    				rs += kstr;
    				newstr = newstr.substring(strIndex);
    			}
    			int m = Integer.parseInt(newstr.replace("&#", ""));
    			char c = (char) m;
    			rs += c;
    		} else {
    			rs += k[i];
    		}
    	}
    	return rs;
    }
    

    3、显示从服务端返回的带有表情的内容

    ImageGetter imageGetter = new ImageGetter() {
    	public Drawable getDrawable(String source) {
    		int id = Integer.parseInt(source);
    		Drawable d = getResources().getDrawable(id);
    		d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    		return d;
    	}
    };
    
    String serverText = ;// serverText 来自服务端返回
    editText2.setText(Html.fromHtml(serverText,imageGetter,null));
    
  • 相关阅读:
    setTimeout()和setInterval()的区别
    iOS开发小技巧
    iOS应用跳转到App Store评分
    前端小技巧-定位的活学活用之仿淘宝列表
    前端CSS
    用c# 开发html5的尝试,试用bridge.net
    Faster数据库研习,一
    五一劳动节,讲讲NEO智能合约的调试
    NEO GUI 多方签名使用
    NEO智能合约开发(二)再续不可能的任务
  • 原文地址:https://www.cnblogs.com/xinye/p/4375935.html
Copyright © 2011-2022 走看看