Смайлики в EditText

Я пытаюсь реализовать действие с EditText, которое заменяет некоторые ключевые слова смайликами (мой код в конце).

Код работает идеально, за исключением одной детали. Если я наберу EditText ".sa." он заменяется img1, но если я хочу отменить его, мне нужно щелкнуть 4 раза по удалению, прежде чем изображение исчезнет (один раз для каждого символа в ключевом слове).

Я впервые работаю со Spannables и не знаю, как это исправить. Вы можете мне помочь?

public class MytestActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        EditText et = (EditText) findViewById(R.id.editText1);
        et.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                getSmiledText(MytestActivity.this, s);
                Log.e("",s.toString());

            }
        });
    }

    private static final HashMap<String, Integer> emoticons = new HashMap<String, Integer>();
    static {
        emoticons.put(".sa.", R.drawable.img1);
        emoticons.put(".sb.", R.drawable.img2);
    }

    public static Spannable getSmiledText(Context context, Editable builder) {

        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;
    }
}
6
задан Addev 9 December 2011 в 16:31
поделиться