当前位置: 首页 > 知识库问答 >
问题:

android:类似gmail的MultiAutoCompleteTextView样式

封飞
2023-03-14

我创建了自定义视图并扩展到MultiAutoCompleteTextView并使用Span,但我有一个问题,若并没有足够的空间容纳文本和图像,那个么Span有(空间),然后视图分割它们

这是我的自定义视图代码:

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;
}


}

有人有什么建议吗?

共有1个答案

萧懿轩
2023-03-14

检查这两个库:

    源码
  • 拆分/令牌自动完成

他们在做你想做的事情。

至少第一个库背后的想法-一旦onTextChanged发生变化,您就可以用TextView创建一个位图,其中包含文本和设置compoundDrawableSwithintInInsicBounds(淹没在画布上)。

          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);

一旦图像名称只是一个位图——它就不能再包装了,你的问题就解决了。

 类似资料:
  • 在MultiAutoCompleteTextView上应用样式:问题是因为OP打算覆盖样式未声明的某些属性。这不是我的问题。 android:MultiAutoCompleteTextView风格,如gmail:这里,OP想要设置与gmail相同的风格,答案显示2 API。此外,没有显示XML代码。因此,这与我的问题和期望大不相同。 我的材质样式似乎没有应用。更准确地说,我只是想让我的(材料!)小

  • 我试图在MultiAutocompleteTextView上应用样式,但该样式似乎未应用。 在风格上。我有以下xml(仅显示一部分): 在我的布局文件中,我有以下内容: 因为主题应用于整个应用程序,所以它也应该应用于MultiAutocompleteTextView。但当我尝试执行应用程序时,会出现以下错误:

  • 本文向大家介绍Android中AutoCompleteTextView与MultiAutoCompleteTextView的用法,包括了Android中AutoCompleteTextView与MultiAutoCompleteTextView的用法的使用技巧和注意事项,需要的朋友参考一下 本文以实例列举了Android中AutoCompleteTextView与MultiAutoComplete

  • 在这里,我的场景有点类似于Gmail的双因素认证。当一个用户成功登录(SMS代码发送给用户),然后用另一个页面挑战他输入SMS代码。如果用户正确地获得了SMS代码,他将被显示为安全页面(如Gmail收件箱)。

  • 我正在寻找一个像facebook应用那样的滑动菜单,即点击左侧菜单按钮,主屏幕向右滑动,然后点击“查看全部”,在幻灯片视图屏幕上,一个新的视图从右向左滑动。

  • 问题内容: 我想为我的一个项目添加类似gmail的文件上传功能。有人可以帮我吗? 我的应用程序是在vb.net中构建的。 我将不胜感激任何帮助或指导。 谢谢 问题答案: 请查看SWFUpload,它实际上是Flash绝对优越的文件上传处理功能的JavaScript API。最好的东西,直到浏览器终于​​赶上。 来自链接: 通过对话框中的ctrl / shift-select一次上传多个文件 所有事