4

Android でチャット アプリケーションを開発しましたが、アプリケーションに Emoctions 機能を追加したいと考えています。次のリンクをたどりました:

Android のメッセージの絵文字

Androidのチャットで絵文字を表示するには?

Android チャット アプリケーションのスマイリー

しかし、間に良い解決策は見つかりませんでした。

適切なハイパーリンクまたは解決策を教えてください。

シナリオ: 人は現在の感情から任意の感情を選択でき、受信者側でも受信する必要があります。

4

3 に答える 3

11

私はそれを解決しました。これが私のコードです:

次のように移動します。

private HashMap<String, Integer> emoticons = new HashMap<String, Integer>();
private ArrayList<String> arrayListSmileys = new ArrayList<String>();
ImageView imgbtn_show_smileys;

あなたのoncreate関数では、このように進みます

emoticons.put(":-)", R.drawable.smile);
emoticons.put(":P", R.drawable.tongue);
emoticons.put(":D", R.drawable.cool);
emoticons.put(":-(", R.drawable.sad);
emoticons.put(":0", R.drawable.cool);
fillArrayList();

使用したい画像/スマイリーのペアの独自のセットを作成します

配列リストを埋める

private void fillArrayList() {
    Iterator<Entry<String, Integer>> iterator = emoticons.entrySet().iterator();
    while(iterator.hasNext()){
        Entry<String, Integer> entry = iterator.next();
        arrayListSmileys.add(entry.getKey());
    }
}

最も重要な部分は、画像をリストビューまたは編集テキストに設定するたびに、この関数を次のように使用することです。

edittext.setText(getSmiledText(this,"your text"));

public Spannable getSmiledText(Context context, String text) {
        SpannableStringBuilder builder = new SpannableStringBuilder(text);
        int index;
        for (index = 0; index < builder.length(); index++) {
            for (Entry<String, Integer> entry : emoticons.entrySet()) {
                int length = entry.getKey().length();
                if (index + length > builder.length())
                    continue;
                if (builder.subSequence(index, index + length).toString().equals(entry.getKey())) {
                    builder.setSpan(new ImageSpan(context, entry.getValue()), index, index + length,
                            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    index += length - 1;
                    break;
                }
            }
        }
        return builder;
    }

ダイアログ ボタンにスマイリーを表示するには

imgbtn_show_smileys.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            final Dialog groupIconsDialog = new Dialog(UserChatActivity.this);
            groupIconsDialog.setTitle("Choose Group Icon");
            groupIconsDialog.setContentView(R.layout.group_icons_layout);
            //calling and setting the image icons to the grid view adapter
            final GridView groupIconsGrid = (GridView)groupIconsDialog.findViewById(R.id.grid_groupIcons);
            groupIconsGrid.setAdapter(new SmileysAdapter(arrayListSmileys, UserChatActivity.this, emoticons));


            groupIconsGrid.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int position, long arg3) {
                    // TODO Auto-generated method stub

                    String value = groupIconsGrid.getAdapter().getItem(position).toString();
                    value = editMessage.getText()+value;
                    Spannable spannable = getSmiledText(UserChatActivity.this, value);
                    editMessage.setText(spannable);
                    groupIconsDialog.dismiss();


                }
            });

            groupIconsDialog.show();

        }
    });

同じことについて疑問がある場合はお知らせください。

ありがとう

于 2013-02-05T07:21:18.730 に答える
2

問題を解決するために使用しているSmileysアダプターは次のとおりです。

public class SmileysAdapter extends BaseAdapter {

    private ArrayList<String> arrayListSmileys = new ArrayList<String>();
    private Context context;
    private HashMap<String, Integer> emoticons = new HashMap<String, Integer>();
    private ArrayList<String> showListSmileys = new ArrayList<String>();


    public SmileysAdapter(ArrayList<String> arraylistSmileys,Context context,HashMap<String, Integer> emoticons) {
        // TODO Auto-generated constructor stub

        this.arrayListSmileys = arraylistSmileys;
        this.context = context;
        this.emoticons = emoticons;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return arrayListSmileys.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return arrayListSmileys.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = LayoutInflater.from(context).inflate(R.layout.row, null);
        ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1);
        imageView.setBackgroundResource(emoticons.get(arrayListSmileys.get(position)));
        return convertView;
        }
}
于 2013-02-25T07:51:12.390 に答える
-1

まあ、基本的に顔文字はこのように処理されます。すべての絵文字は、文字の組み合わせに基づいています。対応する文字の組み合わせで、さまざまなイメージを作成できます。これを使ってシナリオを作ってみましょう。

  1. デバイス A は、:) で表される笑顔のイメージの絵文字を送信しました
  2. 顔文字は、サーバー経由で (または任意の方法で) デバイス B に送信されます。
  3. デバイス B は文字列 :) を受信し、それを笑顔の画像の絵文字に置き換えます
于 2013-02-05T06:00:55.770 に答える