Как получить токенайзер MultiAutoCompleteTextView, похожий на приложение Facebook?
Я создаю приложение, которое имеетДля того, чтобы» поле, как в приложении Facebook "Новое сообщение" особенность.
После выбора элемента из выпадающего списка я создаю область изображений и добавляю ее вMultiAutoCompleteTextView
, я использовалSpaceTokenizer
для этого взгляда. Проблема в том, что когда я нажимаю на клавишу возврата, курсор сначала перемещается в пустое пространство (то есть пробелTokenizer
) и затем, когда я снова нажимаю на клавишу возврата, все слово удаляется .... Я хочу удалить все слово при первом нажатии кнопки возврата, как приложение Facebook ...
Вот мой код дляSpaceTokenizer
multiContentText.setTokenizer(new Tokenizer(){
public int findTokenStart(CharSequence text, int cursor) {
int i = cursor;
if(i>0){
Log.d("textchar ",""+text.charAt(i - 1));
}
while (i > 0 && text.charAt(i - 1) != ' ') {
i--;
}
while (i < cursor && text.charAt(i) == ' ' || text.charAt(i - 1) == '\n') {
i++;
}
return i;
}
public int findTokenEnd(CharSequence text, int cursor) {
int i = cursor;
int len = text.length();
while (i < len) {
if (text.charAt(i) == ' ' || text.charAt(i - 1) == '\n') {
return i;
} else {
i++;
}
}
return len;
}
public CharSequence terminateToken(CharSequence text) {
int i = text.length();
while (i > 0 && text.charAt(i - 1) == ' ' || text.charAt(i - 1) == '\n') {
i--;
}
if (i > 0 && text.charAt(i - 1) == ' ' || text.charAt(i - 1) == '\n') {
return text;
} else {
if (text instanceof Spanned) {
SpannableString sp = new SpannableString(text + " ");
TextUtils.copySpansFrom((Spanned) text, 0, text.length(),
Object.class, sp, 0);
return sp;
} else {
return text+" ";
}
}
}
});
Я использую этот код для созданияTextView
в моем мульти-ContentText
SpannableStringBuilder ssb = new SpannableStringBuilder(multiContentText.getText());
String c="text from the list";
TextView textView = (TextView) inflater.inflate(R.layout.chips_edittext, null);
textView.setText(c); // set text
int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
textView.measure(spec, spec);
textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight());
Bitmap b = Bitmap.createBitmap(textView.getWidth(), textView.getHeight(),Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(b);
canvas.translate(-textView.getScrollX(), -textView.getScrollY());
textView.draw(canvas);
textView.setDrawingCacheEnabled(true);
Bitmap cacheBmp = textView.getDrawingCache();
Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true);
textView.destroyDrawingCache(); // destory drawable
// create bitmap drawable for imagespan
BitmapDrawable bmpDrawable = new BitmapDrawable(viewBmp);
bmpDrawable.setBounds(0, 0,bmpDrawable.getIntrinsicWidth(),bmpDrawable.getIntrinsicHeight());
// create and set imagespan
ssb.setSpan(new ImageSpan(bmpDrawable),0 ,c.length() , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
// set chips span
multiContentText.setText(ssb);
multiContentText.setSelection(multiContentText.getText().length());
Я не уверен, что пространствоTokenizer
это правильный вариант для этого типа поведения ... Любая помощь или указатели будут благодарны ...
Вот скриншот для лучшего понимания ....
У меня есть текст, за которым следует пробел, а затем курсор ... Если я нажимаю клавишу Backspace, он сначала перемещается в пустое место, и только когда я снова нажимаю клавишу Backspace, весь текст удаляется ....
Вот еще один скриншот ..
Здесь курсор не точно между двумяTextView
В отличие от приложения Facebook, которое снова вызывает некоторые проблемы при вставке текста ...