我希望我的EditText
应该以{{1}}的形式工作,因为我在XML文件中写了
AutoComplete
但它不起作用。
我正在使用API v2.2,我的Activity扩展了android:inputType="textAutoComplete|textAutoCorrect"
,在那里我放了一个简单的MapActivity
和一个名为“Search”的按钮。因此,如果我们在EditText
中输入位置名称,按搜索按钮就意味着它应该转到地图中的该位置。
所以我希望EditText
作为EditText
工作。
我怎么能这样做?
答案 0 :(得分:47)
只需使用AutoCompleteTextView
代替普通EditText
。
hello-autocomplete会有所帮助。
答案 1 :(得分:15)
首先转换您的#include <nana/gui/wvl.hpp>
#include <nana/gui/widgets/label.hpp>
int main()
{
using namespace nana;
form fm;
label lb(fm, fm.size());
lb.caption(STR("Hello, World"));
fm.show();
exec();
}
然后使用EditText->AutoCompleteTextView
AutoCompleteTextView
假设您创建的XML ArrayAdapter
被命名为string-array
,然后它可以链接到您的list_of_countries
,如下所示:
AutoCompleteTextView
答案 2 :(得分:9)
我使用此代码:
1)在AndroidManifest.xml上
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
2)在xml布局上,您必须使用AutoCompleteTextView而不是EditText。
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:text="AutoCompleteTextView" />
3)在活动文件
上使用此功能private ArrayAdapter<String> getEmailAddressAdapter(Context context) {
Account[] accounts = AccountManager.get(context).getAccounts();
String[] addresses = new String[accounts.length];
for (int i = 0; i < accounts.length; i++) {
addresses[i] = accounts[i].name;
}
return new ArrayAdapter<String>(context, android.R.layout.simple_dropdown_item_1line, addresses);
}
4)关于onCreate活动:
AutoCompleteTextView autoCompleteTextView1 = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
autoCompleteTextView1.setAdapter(getEmailAddressAdapter(this));
答案 3 :(得分:2)
默认ArrayAdapter
仅按第一个字符过滤。如果您还想查看包含搜索关键字的字词,则需要使用自定义ArrayAdapter并覆盖其getView
和getFilter
方法。看看我在另一个StackOverflow问题中提供的完整解决方案:https://stackoverflow.com/a/37298258/1808829
答案 4 :(得分:0)
此代码用于MultiAutoCompleteTextView的更改设置
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,codeKeyWords);
MultiAutoCompleteTextView autoCompleteTextView1 = (MultiAutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
autoCompleteTextView1.setAdapter(adapter);
autoCompleteTextView1.setThreshold(1);
autoCompleteTextView1.setTokenizer(new this.CommaTokenizer());
在下面的代码中,通过 space char 和 \ n 字符来分割单词...(为什么我们需要这个代码?因为普通multiAutoComplete.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
就像那样并且它通过','字符分割单词,但是我们的代码可以帮助您通过这些字符进行分割 ''和'\ n' 强>)
/**
* This simple Tokenizer can be used for lists where the items are
* separated by a comma and one or more spaces.
*/
public static class CommaTokenizer implements Tokenizer {
public int findTokenStart(CharSequence text, int cursor) {
int i = cursor;
while (i > 0 && text.charAt(i - 1) != ' ') {
i--;
}
while (i < cursor && text.charAt(i) == '\n') {
i++;
}
return i;
}
public int findTokenEnd(CharSequence text, int cursor) {
int i = cursor;
int len = text.length();
while (i < len) {
if (text.charAt(i) == '\n') {
return i;
} else {
i++;
}
}
return len;
}
public CharSequence terminateToken(CharSequence text) {
int i = text.length();
while (i > 0 && text.charAt(i - 1) == ' ') {
i--;
}
if (i > 0 && text.charAt(i - 1) == ' ') {
return text;
} else {
if (text instanceof Spanned) {
SpannableString sp = new SpannableString(text + "\n");
TextUtils.copySpansFrom((Spanned) text, 0, text.length(),
Object.class, sp, 0);
return sp;
} else {
return text + " ";
}
}
}