Android 类似Gmail的联系人选择器/标签云/芯片云,配置文件图像安卓

Android 类似Gmail的联系人选择器/标签云/芯片云,配置文件图像安卓,android,android-layout,contact-form,tag-cloud,word-cloud,Android,Android Layout,Contact Form,Tag Cloud,Word Cloud,我的目标 创建一个联系人选取器(左边有圆形图像),就像gmail在发送电子邮件时所做的那样。我做了一些研究,发现了EditText云和芯片云,但它们不支持自定义布局中的图像,适配器只接受列表。是否有人对如何实现这一点有正确的想法,或者使用库来实现这一点 提前谢谢。我建议您使用 公共类ContactsCompletionView扩展了TokenCompleteTextView{ 公共联系人完成视图(上下文、属性集属性){ 超级(上下文,attrs); } @凌驾 受保护的视图getViewFor

我的目标

创建一个联系人选取器(左边有圆形图像),就像gmail在发送电子邮件时所做的那样。我做了一些研究,发现了EditText云和芯片云,但它们不支持自定义布局中的图像,适配器只接受
列表
。是否有人对如何实现这一点有正确的想法,或者使用库来实现这一点

提前谢谢。

我建议您使用

公共类ContactsCompletionView扩展了TokenCompleteTextView{
公共联系人完成视图(上下文、属性集属性){
超级(上下文,attrs);
}
@凌驾
受保护的视图getViewForObject(个人){
LayoutFlater l=(LayoutFlater)getContext().getSystemService(Activity.LAYOUT\u INFLATER\u SERVICE);
TextView视图=(TextView)l.inflate(R.layout.contact_token,(ViewGroup)getParent(),false);
view.setText(person.getEmail());
返回视图;
}
@凌驾
受保护的Person defaultObject(字符串完成文本){
//愚蠢的猜测我们是否有电子邮件的简单例子
int index=completionText.indexOf('@');
如果(索引==-1){
返回新人(completionText,completionText.replace(“,”)+“@example.com”);
}否则{
返回新人(completionText.substring(0,索引),completionText);
}
}
}
输出:


关闭,但我真的希望它在名称的左侧有一个图像视图。啊,我在LayoutFlater中找到它。我正在检查它是否修复,尽快返回给您;)它现在可以工作了,仍然需要大量的手动格式化,但是基础就在那里。谢谢你的支持!很高兴帮助您愉快地编码:)
public class ContactsCompletionView extends TokenCompleteTextView<Person> {
    public ContactsCompletionView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected View getViewForObject(Person person) {

        LayoutInflater l = (LayoutInflater) getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        TextView view = (TextView) l.inflate(R.layout.contact_token, (ViewGroup) getParent(), false);
        view.setText(person.getEmail());

        return view;
    }

    @Override
    protected Person defaultObject(String completionText) {
        //Stupid simple example of guessing if we have an email or not
        int index = completionText.indexOf('@');
        if (index == -1) {
            return new Person(completionText, completionText.replace(" ", "") + "@example.com");
        } else {
            return new Person(completionText.substring(0, index), completionText);
        }
    }
}