我正在尝试制作“撰写新邮件”屏幕,例如Android 4.1中内置的“邮件”应用程序

  1. 我注意到当一个人选择一个联系人时,在AutoCompleteTextView中插入了Button类的东西。 那怎么可能? 请帮忙,因为我什至不知道要给出一个起始代码。 PS:我希望在创建新帖子时在StackOverflow的“ Tags”条目中实现类似的功能。 IE单词(匹配的联系人)被按钮替换,在右边缘带有一个小X可以将其删除! :-)

  2. 如何创建加载速度如此之快的适配器? 一种想法是缓存所有联系人的列表(姓名,电话号码,电话号码类型)。 还有其他想法吗? (例如,如果我们可以使用例如2个字符的初始搜索字符串来查询内容提供者,这将极大地减少自动完成结果的数量,从而减少加载适配器所需的时间。但是,当然,这需要设置我的疑问是,是否可以查询ContactsContract以获得以几个给定字母开头的搜索结果,而不仅仅是使用Cursor从头开始扫描整个数据库?

  3. autocompletetextview无法识别空格,只会给出任何结果。 我已经读过了,但无法实现,有人对此有工作代码吗?

#1楼 票数:0

您可以在Android GitHub上自由查看内置消息传递应用程序的源代码。 您需要的是耐心阅读和理解代码。 我提醒您, 并非所有代码都在公共SDK中,因此在使用时要格外小心。

1,带有联系人标签RecipientEditTextView的MultiAutoComplete。 而且RecipientsEditor是类RecipientEditTextView扩展类,他们在应用程序Update中使用了它:这是Compose屏幕的布局 第37行是您想要的autocompletetextview。 下面是它的布局。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">

<com.android.mms.ui.RecipientsEditor
    android:id="@+id/recipients_editor"
    android:hint="@string/to_hint"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textFilter"
    android:layout_weight="1"
    android:textColor="#000000"
/>

<ImageButton android:id="@+id/recipients_picker"
    android:src="@drawable/ic_launcher_contacts"
    android:layout_marginLeft="5dip"
    android:layout_width="50dip"
    android:layout_height="fill_parent"
    android:layout_weight="0"
    android:visibility="gone"
/>

#2楼 票数:0

我建立了TokenAutoComplete来解决此问题,因为似乎没有一种简单的方法可以做到这一点。 这里有一个基本的例子,解决点1和3:

public class ContactsCompletionView extends TokenCompleteTextView {
    public ContactsCompletionView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected View getViewForObject(Object object) {
        Person p = (Person)object;

        LayoutInflater l = (LayoutInflater)getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        LinearLayout view = (LinearLayout)l.inflate(R.layout.contact_token, (ViewGroup)ContactsCompletionView.this.getParent(), false);
        ((TextView)view.findViewById(R.id.name)).setText(p.getName());

        return view;
    }

    @Override
    protected Object 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);
        }
    }
}

contact_token的布局代码(您需要找到自己的x drawable)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/token_background">
    <TextView android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:textSize="14sp"
        android:text="Test Me"
        android:padding="2dp" />

    <ImageView
        android:layout_height="10dp"
        android:layout_width="10dp"
        android:src="@drawable/x"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="3dp"
        android:layout_marginRight="5dp" />
</LinearLayout>

可提取令牌背景

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#ffafafaf" />
    <corners
        android:topLeftRadius="5dp"
        android:bottomLeftRadius="5dp"
        android:topRightRadius="5dp"
        android:bottomRightRadius="5dp" />
</shape>

人对象代码

public class Person implements Serializable {
    private String name;
    private String email;

    public Person(String n, String e) { name = n; email = e; }

    public String getName() { return name; }
    public String getEmail() { return email; }

    @Override
    public String toString() { return name; }
}

样本活动

public class TokenActivity extends Activity {
    ContactsCompletionView completionView;
    Person[] people;
    ArrayAdapter<Person> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        people = new Person[]{
                new Person("Marshall Weir", "marshall@example.com"),
                new Person("Margaret Smith", "margaret@example.com"),
                new Person("Max Jordan", "max@example.com"),
                new Person("Meg Peterson", "meg@example.com"),
                new Person("Amanda Johnson", "amanda@example.com"),
                new Person("Terry Anderson", "terry@example.com")
        };

        adapter = new ArrayAdapter<Person>(this, android.R.layout.simple_list_item_1, people);

        completionView = (ContactsCompletionView)findViewById(R.id.searchView);
        completionView.setAdapter(adapter);
        completionView.setTokenClickStyle(TokenCompleteTextView.TokenClickStyle.Delete);
    }
}

布局代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.tokenautocomplete.ContactsCompletionView
        android:id="@+id/searchView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>

看起来是这样的:

在此处输入图片说明

  ask by Daksh translate from so

未解决问题?本站智能推荐:

1回复

Androidautocompletetextview不会使用自定义适配器填充联系人

我创建了一个自定义适配器和自定义列表项。 我最初使用的是一个简单的列表项,只是填充了名称或数字。 但是,现在我想在每个列表项中同时显示姓名和电话号码。 现在,我在自动填充文本中输入内容时,不会填充任何内容。 我进行了一些错误测试,似乎它甚至没有调用重写的getView()方法。 我似乎
3回复

如何从SQLite数据库填充AutoCompleteTextView[关闭]

我正在尝试为Android设计一个应用程序,在该应用程序中,我已将手机的所有联系人存储在SQLite数据库中,并且我希望从数据库中填写AutoCompleteTextView中的建议。 请告诉我我如何实现目标?
1回复

如何使用AutoCompleteTextViewandroid显示联系人?

我想在我的应用程序中使用AutoCompleteTextView显示联系人。 我用谷歌搜索并使用了一些来自堆栈溢出的代码,但有时它无法正常工作,有时也崩溃了。 请任何人在这方面帮助我。 custcontview.xml: mianfragment.java: 在OnCreate:
3回复

从联系人列表中获取姓名和电子邮件非常缓慢

我正在实现一个AutoCompleteTextView,我需要所有联系人的姓名和电子邮件。 我发现这个片段我异步运行,但速度非常慢。 我正在执行一种内部查询,我认为这是问题所在。 有没有办法调整它并使其更快?
1回复

联系人姓名的自动填充文本视图,该姓名在单击时会获得其号码?

我正在尝试学习如何根据用户输入的与联系人姓名的一部分匹配的字母,在android应用中制作自动完成的textview,其中包含联系人及其编号的下拉列表。 我将如何完成? 我在Google上花费了数小时,却没有找到完整的解决方案,我认为这很奇怪。 任何帮助,将不胜感激! 谢谢,
1回复

如何复制在消息传递应用程序中选择联系人的功能?

Android的消息传递应用程序位于projects / platform / packages / apps / Mms.git中,有一个名为RecipientsEditor的类。 我希望能够创建MultiAutoCompleteTextView,以相同的方式过滤联系人,以便在我的应用程序中
1回复

使用文本框在Android上搜索联系人(例如在MMS应用中)

我正在尝试创建一个文本框,使您可以开始输入联系人的姓名,并在电话中显示联系人的下拉菜单,其姓名与您输入的几个字母匹配。 (基本上,我正在尝试在“撰写新邮件”屏幕上显示的MMS.apk应用中克隆收件人框) 我一直在尝试使用AutoCompleteTextView来做到这一点。 按照And
1回复

AutoCompleteTextView事件以不断创建新的适配器

我正在研究 android 中的 autocompleteTextView 功能。 我试图在用户键入时提供选项,这些选项实际上来自 Web API(json 格式)。我的疑问是:比如说,用户开始键入,当用户键入 3 个字符时,我需要 ping webAPI,获取所有它发送给我的选项。 我创建了 Ar