- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想创建自定义的 MultiAutoCompleteTextView,比如 gmail 应用程序:
我创建自定义 View 并扩展到 MultiAutoCompleteTextView 并使用 Span ,但我有问题,如果没有足够的空间容纳文本和图像,然后 span 有(空间)然后 View 拆分它们
还有我的自定义 View 代码:
public class CustomMultiAutoCompleteTextView extends MultiAutoCompleteTextView {
@Override
public void setTokenizer(Tokenizer t) {
super.setTokenizer(t);
}
public CustomMultiAutoCompleteTextView(Context context) {
super(context);
}
public CustomMultiAutoCompleteTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomMultiAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void replaceText(CharSequence text) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.avatar);
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append("g");
builder.setSpan(new ImageSpan(getContext(), getRoundedBitmap(bitmap)),
builder.length() - 1, builder.length(), 0);
builder.append(text);
builder.setSpan(new BackgroundColorSpan(Color.GRAY), 1, builder.length(), 0);
super.replaceText(builder);
}
public static Bitmap getRoundedBitmap(Bitmap bitmap) {
final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(output);
final int color = Color.RED;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawOval(rectF, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
bitmap.recycle();
return output;
}
}
所以有人有建议吗?
最佳答案
检查这两个库:
他们所做的几乎就是您想要完成的事情。
至少第一个库背后的想法 - 一旦 onTextChanged
发生,您就可以使用文本和设置 从
(淹没在 TextView
创建一个 Bitmap
>CompoundDrawablesWithIntrinsicBoundsCanvas
上)。
TextView textView = (TextView) lf.inflate(R.layout.chips_edittext, null);
textView.setText(c); // set text
int image = ((ChipsAdapter) getAdapter()).getImage(c);
textView.setCompoundDrawablesWithIntrinsicBounds(0, 0, image, 0);
// capture bitmapt of genreated textview
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),x ,x + c.length() , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
一旦图像+名称只是一个位图 - 它就不能再被包裹,您的问题就解决了。
关于android: 像 gmail 一样的 MultiAutoCompleteTextView 风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35014640/
我正在尝试以这样的方式使用 MultiAutocompleteTextView,每当我在 TextView 中键入字符时,都会触发一个事件,或者在键入 2-3 个元素后,再次触发该事件。 我使用多重自
我有一个 MultiAutoCompleteTextView与 TextWatcher 相关联和一个适配器,它根据字段中输入的内容从数据库返回内容。这一切都正常工作,但我正在寻找一种方法来更改默认 t
我正在使用 MultiAutoCompleteTextView 从名称列表中提出建议,以便用户每次都输入有效名称。我遇到的问题是一个用户可以输入多个名称,而我希望用户只能输入一个名称然后移动到下一个表
我需要使用用户设备上联系人的电话号码创建一个 MultiAutoCompleteTextView。我需要的是类似于gmail;使用 gmail 电子邮件地址除外。对于联系人,我有以下需求: 每个电话号
我在我的应用程序中使用 MultiAutoCompleteTextView。这是 Android API 中的一个很棒的控件。但是我面临着一些问题。一,最烦人的是,在我的 Nexus 5 上,它不显示
我有一个 MultiAutoCompleteTextView。当我输入“Sal”时,它会提示“Salami”,但当我在框中按下它时,它会显示“Salami,”。 我怎么能阻止呢? 我的代码: void
我正在使用以下教程来实现 MultiAutoCompleteTextView : http://developer.android.com/reference/android/widget/AutoC
我的 Activity 中有此代码: ParseQuery query = ParseUser.getQuery(); query.findInBackground(new FindCallback(
我有一个 MultiAutoCompleteTextView我的 Activity 中的小部件,它有一个 ArrayAdapter由基于 Web 的调用的结果填充。当用户在 TextView 中键入字
当我在 multiautocompletetextview 中从键盘输入双空格时,我想添加逗号。我在谷歌上搜索了很多东西。但达不到我的目标。我想替换用户输入的双空格的逗号。 很明显,我必须在 addt
如何让我的 MultiAutoCompleteTextView 在每个列表位置的字符串中搜索(也意味着搜索子字符串)。是否需要设置任何属性或者甚至可能?例如,如果列表对象之一是“abc123”,那么是
我将 MultiAutoCompleteTextView 集成到我的字典应用程序中,所以现在集成它之后。 我在第二个屏幕截图中遇到了这样的问题... 所以现在我不想要那个 "," 如 ! 之后的第二个
我正在使用 MultiAutoCompleteTextView,它似乎可以正常处理以下异常:焦点在 MultiAutoCompleteTextView 中,按下软键盘上的“下一步”键不会将焦点移动到下
我遇到的问题是单击 MultiAutoCompleteTextView 时软键盘没有出现。当我第一次点击另一个 EditText,然后切换到 MultiAutoCompleteTextView 时,我
我有一个存储在 Firebase 中的标签列表。在我的一个 fragment 中,MultiAutoCompleteTextView (MACTV) 允许用户选择相关标签。 目标, 用于填充数组(用于
我已经尝试过常规方法,但它不起作用: multiEdit.requestFocus(); InputMethodManager imm = (InputMethodManager) getActivi
我试图找到设置 MultiAutoCompleteTextView 列表分隔符的方法,但它似乎没有 android:divider 属性或 setDivider() 方法。是否可以更改默认的分隔符资源
类似问题 Apply a style on MultiAutoCompleteTextView :问题是由于 OP 打算覆盖样式未声明的某些属性。这不是我的问题。 android: MultiAuto
关闭。 这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以
ArrayAdapter adapter1 = new ArrayAdapter(Application.getContext(), R.layout.report_add_list_item, Li
我是一名优秀的程序员,十分优秀!