4

選択した連絡先にクローズ マーク イメージEditTextを追加するアプリケーションを開発しています。そのクローズ マーク イメージをクリックすると、連絡先を削除する必要があります。クローズ マーク イメージを表示するまでのコードは完成しましたが、それらのクローズ マーク イメージを処理する方法がわかりません。方法を教えてください。

ここに画像の説明を入力

私のコード:

for (int i = 0; i < selectedItems.size(); i++) {
                    String na = selectedItems.get(i);
                    TextView tv = createContactTextView(na);
                    BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(tv);
                    bd.setBounds(0, 0, bd.getIntrinsicWidth(),
                            bd.getIntrinsicHeight());
                    sb.append(na + ",");
                    sb.setSpan(new ImageSpan(bd), sb.length()
                            - (na.length() + 1), sb.length() - 1,
                            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                }

                txt.setText(sb);

private Object convertViewToDrawable(TextView view) {
        int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
        view.measure(spec, spec);
        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
        Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(),
                view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(b);
        c.translate(-view.getScrollX(), -view.getScrollY());
        view.draw(c);
        view.setDrawingCacheEnabled(true);
        Bitmap cacheBmp = view.getDrawingCache();
        Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true);
        view.destroyDrawingCache();
        return new BitmapDrawable(viewBmp);
    }

    private TextView createContactTextView(String text) {
        TextView tv = new TextView(this);
        tv.setText(text);
        tv.setTextSize(25);
        tv.setBackgroundResource(R.drawable.oval_small);
        tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.close, 0);
        return tv;
    }
4

2 に答える 2

6

ClickableSpanあなたが望むものです:

for (int i = 0; i < selectedItems.size(); i++) {
     String na = selectedItems.get(i);
     TextView tv = createContactTextView(na);
     BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(tv);
     bd.setBounds(0, 0, bd.getIntrinsicWidth(),bd.getIntrinsicHeight());
     sb.append(na + ",");
     sb.setSpan(new ImageSpan(bd), sb.length()
          - (na.length() + 1), sb.length() - 1,
          Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

     final int index = i;  
     sb.setSpan(new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    // here add your code
                    // delete your selectedItems[index]
                    // recreate your SpannedString and set to txt
                }
            }, sb.length()
                    - (na.length() + 1), sb.length() - 1,
                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
 }

 txt.setText(sb);
 txt.setMovementMethod(LinkMovementMethod.getInstance());  // important

最後の行を忘れないでください

于 2014-01-16T04:03:32.557 に答える
1

あなたがやろうとしていることを行う最善の方法は、AOSP* の「公式」チップ・ライブラリーを使用することです。

たとえば、デフォルトの SMS アプリで番号の入力を開始すると、一致する可能性のある連絡先のリストが表示されます。連絡先を選択するか、番号が一致すると、「チップ」に変わり、「x」ボタンで受信者リストから削除されます。

この動作を取得するには、AOSP から直接このライブラリを使用します: https://android.googlesource.com/platform/frameworks/opt/chips/+/master

簡単な説明は、Google で働く Android デベロッパー アドボケイトの Roman Nurik によるものです: https://plus.google.com/+RomanNurik/posts/WUd7GrfZfiZ

※AOSPはAndroid Open Source Projectの略です

于 2014-01-16T17:03:20.210 に答える