【问题标题】:display smiley in textview and edittext in android在 android 的 textview 和 edittext 中显示笑脸
【发布时间】:2012-02-17 12:40:11
【问题描述】:

您好,我正在开发聊天应用程序,我想在其中插入笑脸 我不太了解如何在其中集成和显示 你能给我做同样的建议吗?

ImageGetter imageGetter = new ImageGetter() {
    public Drawable getDrawable(String source) {
        Drawable d = getResources().getDrawable(
                R.drawable.happy);
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        return d;
    }
};

cs = Html.fromHtml(
        "<img src='"
                + getResources()
                        .getDrawable(R.drawable.happy)
                + "'/>", imageGetter, null);
System.out.println("cs is:- " + cs);
edttxtemoji.setText(cs);

我找到了这段代码,它使用了图像,这可行吗? 还是有其他解决方案? 请提前给我更好的解决方案

【问题讨论】:

标签: android chat android-edittext


【解决方案1】:

是的,还有另一种在TextViewEditText 中显示笑脸的方式。使用 ImageSpan 构建一个 Spannable 文本,然后将 Spannable 设置为 TextViewEditText。这是相同的post

【讨论】:

    【解决方案2】:

    在edittext中设置笑脸

    int value=R.id.ic_launcher;
    Drawable Smiley = getResources().getDrawable(value);
    Smiley.setBounds(0, 0, 15, 15);
    SpannableStringBuilder builder = new SpannableStringBuilder();
    String imgValue = "["+value+"]";
    builder.append(imgValue);
    builder.setSpan(new ImageSpan(Smiley), builder.length()-imgValue.length(), builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    edit_text.getText().insert(txt.getSelectionStart(), builder);
    

    现在在列表视图或文本视图中获取笑脸

    textview.setText(addSmileySpans(context,edit_text.getText()));
    public CharSequence addSmileySpans(Context context, CharSequence msg) {
    
        SpannableStringBuilder builder = new SpannableStringBuilder(your_recieved_message);
        Pattern pattern = Pattern.compile("\\[([^\\[\\]]+)\\]");
        if( pattern != null )
        {
            Matcher matcher = pattern.matcher( your_recieved_message );
            int matchesSoFar = 0;
            while( matcher.find() )
            {
                CharSequence cs =matcher.group().subSequence(1, matcher.group().length()-1);
                int value = Integer.parseInt(cs.toString());
                System.out.println("pattern is::"+matcher.group().subSequence(1, matcher.group().length()-1)); 
                int start = matcher.start() - (matchesSoFar * 2);
                int end = matcher.end() - (matchesSoFar * 2);
                Drawable Smiley = context.getResources().getDrawable(value);
                Smiley.setBounds(0, 0,15,15);
                builder.setSpan(new ImageSpan(Smiley), start + 1, end - 1, 0 );
                builder.delete(start, start + 1);
                builder.delete(end - 2, end -1);
                matchesSoFar++;
    
            }
        }
        return builder;
    }
    

    【讨论】:

      【解决方案3】:

      我觉得有点晚了。

      public void addSmily() {
          CharSequence text = myEditText.getText();
          int resource  = R.drawable.ic_menu_emoticons ;
          myEditText.setText(getSpannableText(text,resource));
      }
      
      private Spannable getSpannableText(CharSequence text, int smilyToAppend) {
          Spannable spannable = Factory.getInstance().newSpannable(text+" ");
          ImageSpan smilySpan = new ImageSpan(getApplicationContext(),smilyToAppend);
          spannable.setSpan(smilySpan, spannable.length()-1, spannable.length(), 0);
          return spannable;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-16
        • 1970-01-01
        • 2013-10-10
        • 2015-12-31
        • 2016-08-06
        相关资源
        最近更新 更多