简单Android手机端发送展示表情

               学习android也有半年时间了,逐渐由一个菜鸟入门。这是自己写得第一遍技术文章,算是鼓励下自己的学习吧,纪念一下。

               和同学一起做的一个小东西,需要实现android客户端发送表情和文字(评论),上传到服务器,然后需要更新数据得到表情和文字展示。基本思路是在editText中利用android中的Html类和ImageGetter展示表情,发送数据时用@+ImageId+@代替发送文字和为图片到服务器,展示时在textView中展示图片。在网上找过很多例子,发现发送很容易实现,但是展示的时候总是出现包含obj的小方块,表情无法正常显示,于是想到了这样一个方法,经过实验发现还是简单可行的。下面是主要功能代码,xml文件等就不粘贴了。

          1.发送表情页面

    private OnClickListener expressionButtonListener=new OnClickListener(){

		@Override
		public void onClick(View v) {
			Context mContext = TitleDetailActivity.this;
			LayoutInflater mLayoutInflater = (LayoutInflater) mContext
			.getSystemService(LAYOUT_INFLATER_SERVICE);
		View expression_popunwindwow = mLayoutInflater.inflate(
				R.layout.expressions, null);
		
		ImageView im1=(ImageView)(expression_popunwindwow.findViewById(R.id.expression1IV));
		ImageView im2=(ImageView)(expression_popunwindwow.findViewById(R.id.expression2IV));
		ImageView im3=(ImageView)(expression_popunwindwow.findViewById(R.id.expression3IV));
		ImageView im4=(ImageView)(expression_popunwindwow.findViewById(R.id.expression4IV));
		ImageView im5=(ImageView)(expression_popunwindwow.findViewById(R.id.expression5IV));
		ImageView im6=(ImageView)(expression_popunwindwow.findViewById(R.id.expression6IV));
		ImageView im7=(ImageView)(expression_popunwindwow.findViewById(R.id.expression7IV));
		ImageView im8=(ImageView)(expression_popunwindwow.findViewById(R.id.expression8IV));
		ImageView im9=(ImageView)(expression_popunwindwow.findViewById(R.id.expression9IV));
		
		im1.setOnClickListener(expressionImageViewClickLintener);
		im2.setOnClickListener(expressionImageViewClickLintener);
		im3.setOnClickListener(expressionImageViewClickLintener);
		im4.setOnClickListener(expressionImageViewClickLintener);
		im5.setOnClickListener(expressionImageViewClickLintener);
		im6.setOnClickListener(expressionImageViewClickLintener);
		im7.setOnClickListener(expressionImageViewClickLintener);
		im8.setOnClickListener(expressionImageViewClickLintener);
		im9.setOnClickListener(expressionImageViewClickLintener);
		
		
		
		mpopupWindow = new PopupWindow(expression_popunwindwow,
				LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
	
		mpopupWindow.showAtLocation(findViewById(R.id.titleDetailMain), Gravity.BOTTOM|Gravity.RIGHT, 50, 50);
		
		
		}
    };
    private OnClickListener expressionImageViewClickLintener=new OnClickListener(){

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			mpopupWindow.dismiss();
			ImageGetter ig = new ImageGetter(){

				@Override
				public Drawable getDrawable(String source) {
					// TODO Auto-generated method stub
					int imageId= Integer.parseInt(source);
					Drawable d = getResources().getDrawable(imageId);
					 d.setBounds(0, 0, d.getIntrinsicWidth(),d.getIntrinsicHeight());
				     return d;    
				}
			};
			//需要判断
			int drawableID = 0;
			switch(v.getId()){
				case R.id.expression1IV: drawableID=R.drawable.expression1;break;
				case R.id.expression2IV: drawableID=R.drawable.expression2;break;
				case R.id.expression3IV: drawableID=R.drawable.expression3;break;
				case R.id.expression4IV: drawableID=R.drawable.expression4;break;
				case R.id.expression5IV: drawableID=R.drawable.expression5;break;
				case R.id.expression6IV: drawableID=R.drawable.expression6;break;
				case R.id.expression7IV: drawableID=R.drawable.expression7;break;
				case R.id.expression8IV: drawableID=R.drawable.expression8;break;
				case R.id.expression9IV: drawableID=R.drawable.expression9;break;
			}
			CharSequence cs =Html.fromHtml("<img src='"+drawableID+"'/>", ig, null);
			System.out.println(cs);
			tdResponseCommentContent.append(cs);
			String faceContent =FilterHtml(Html.toHtml(tdResponseCommentContent.getText()));
							
		}
    	
    };
    public static String FilterHtml(String str){
        str = str .replaceAll("<(?!br|img)[^>]+>", "").trim();
        //return UnicodeToGBK2(str);
        String str2 = str.replace("<img src=\"", "@");
        String str3 = str2.replace("\">","@");
        return str3;
    }
    
        2.展示表情代码
public OneCommentLayout(Context context, AttributeSet attrs,Comment comment) {  
	   super(context, attrs); 
            LayoutInflater.from(context).inflate(R.layout.onecomment, this, true);
	   peopleName = (TextView) findViewById(R.id.ocPeopleName);   
            commentTime = (TextView) findViewById(R.id.ocTime);   
            commentContent = (TextView) findViewById(R.id.ocContent);  
            String commentBodyStr = comment.getCommentContent();       
       	   peopleName.setText(comment.getCommenterName());
            commentTime.setText(comment.getCommentTime());
            filterContent(commentBodyStr,commentContent);
       
       
   }
    /**  
     * 设置显示的文字  
     */  
    public  void  filterContent(String str,TextView commentContent){
    	
    	System.out.println(str);
    	ImageGetter ig = new ImageGetter(){

			@Override
			public Drawable getDrawable(String source) {
				// TODO Auto-generated method stub
				int imageId= Integer.parseInt(source);
				Drawable d = getResources().getDrawable(imageId);
				 d.setBounds(0, 0, d.getIntrinsicWidth(),d.getIntrinsicHeight());
			     return d;    
			}
		};
		//String c = "abc@234@df@3423@";
		// 正则初始化
		Pattern p = Pattern.compile("@[0-9]+@");
		// 匹配器初始化
		Matcher m = p.matcher(str);
		// 匹配查询
		
		String[] strs = new String[10];   //设置了10个最大值
		String target = str;
		int i=0;
		while (m.find()) {
			strs[i]=m.group(0);
			i++;
			
		}
		commentContent.setText("");
		for(int j=0;j<i;j++){
			int before = target.indexOf(strs[j]);
			int after = before+strs[j].length();
			commentContent.append(target.substring(0, before));
			String strid=strs[j].substring(1, strs[j].length()-1);
			CharSequence cs= Html.fromHtml("<img src='"+strid+"'/>", ig, null);
			commentContent.append(cs);
			if(j==i-1)
			{
			 	commentContent.append(target.substring(after, target.length()));
				
			}
		}
		if(i==0) commentContent.append(str);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值