Я хотел бы иметь поле, похожее на то, что это обеспечивает (http://aehlke.github.io/tag-it/), но в приложении для Android. Кто-нибудь знает о реализации или о том, что я должен сделать, чтобы сделать эту работу на Android? Я просмотрел и ничего не нашел. Я новичок в AndroidПометка ключевых слов в textinput в android
ответ
Ok я нашел хорошее решение, которое я отлаживается и немного упрощен, это здесь: http://www.kpbird.com/2013/02/android-chips-edittext-token-edittext.html
В основном я продлил MultiAutoCompleteTextView
. Я также создал пользовательский разделитель для использования пространства, но это не имеет значения и может быть найдено в другом месте. Я прокомментировал код, где это должно быть изменено на запятую.
Я добавил реализацию пользовательского TextWatcher
где реализован метод onTextChange
запустить метод я назвал bubbleWord() (в основном взяты из вышеупомянутого источника)
private void bubbleWord() {
int numberOfBubbles = 0;
String triggersString = getText().toString();
//note that I use space as a separator
if (triggersString.contains(" ")) {
SpannableStringBuilder ssb = new SpannableStringBuilder(
getText());
BubbleMultiAutoCompleteTextView.this
.setTriggersArray(triggersString.trim().split(" "));
String[] triggers = BubbleMultiAutoCompleteTextView.this
.getTriggers();
for (String trigger : triggers) {
LayoutInflater lf = (LayoutInflater) getContext()
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
TextView textView = (TextView) lf.inflate(
R.layout.bubble_edit, null);
textView.setText(trigger); // 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
@SuppressWarnings("deprecation")
BitmapDrawable bmpDrawable = new BitmapDrawable(viewBmp);
bmpDrawable.setBounds(0, 0,
bmpDrawable.getIntrinsicWidth(),
bmpDrawable.getIntrinsicHeight());
// create and set imagespan
ssb.setSpan(new ImageSpan(bmpDrawable), numberOfBubbles,
numberOfBubbles + trigger.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
numberOfBubbles = numberOfBubbles + trigger.length() + 1;
}
// set chips span
setText(ssb);
// move cursor to last
setSelection(getText().length());
}
}
В папке макета этот файл был включен (так же, как и раньше, почти такой же, как источник, но немного по-другому):
<?xml version="1.0" encoding="UTF-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/edtTxt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#9191B5"
android:drawablePadding="2dp"
android:drawableRight="@drawable/exclamation_octagon_fram"
android:padding="8dp"
android:shadowColor="#FFFFFF"
android:shadowDy="1"
android:shadowRadius="0.01"
android:textColor="#FFFFFF"
android:textSize="18sp"
android:textStyle="bold" />
Пожалуйста, дайте мне знать, если кто нуждается в этом, и я что-то забыл.
Было бы неплохо, если бы значок был доступен для удаления. Он еще не реализован, но я рассмотрю его и отредактирую ответ, обеспечивающий это решение, если у меня будет время позже. – Piddien
Посмотрите на это. Сво [. Ближайший ответ, который я нашел] [1] Надеюсь, что это помогает [1]: http://stackoverflow.com/a/10864568/2345913 – CRUSADER
спасибо. Я проверю его – Piddien