在android的文本输入中标记关键字
Posted
技术标签:
【中文标题】在android的文本输入中标记关键字【英文标题】:Tagging keywords in a textinput in android 【发布时间】:2013-04-29 06:21:14 【问题描述】:我希望有一个类似于它提供的字段 (http://aehlke.github.io/tag-it/) 但在 android 应用程序中。有谁知道一个实现或我应该怎么做才能在 Android 中完成这项工作?我浏览过,一无所获。我是 Android 新手
【问题讨论】:
看看这个。它是 [我找到的最接近的答案。][1] 希望这会有所帮助 [1]:***.com/a/10864568/2345913 谢谢。我去看看 【参考方案1】:好的,我找到了一个很好的解决方案,我做了一些调整和简化,它在这里: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_
android:layout_
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" />
如果有人需要这个,请告诉我,我忘记了什么。
【讨论】:
最好让图标可点击以进行删除。它尚未实现,但如果我稍后有时间,我会研究它并编辑提供解决方案的答案。以上是关于在android的文本输入中标记关键字的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript关键字高亮显示。使用适合每个应用程序的选项标记文本。也可用作jQuery插件。
用VC写了一个文本编辑器,怎样将输入里面的关键字变色实现高亮状态,就像在VC里面写代码输入C++关键字那样