まず、EditTextをMultiAutoCompleteTextViewにします。 MultiAutoCompleteTextViewを使用すると、テキストの一部(たとえば、@の後のテキスト)を置き換えることができます。
ザ・あなたはこのような何かを行うことができます。
final MultiAutoCompleteTextView inputEditText = (MultiAutoCompleteTextView) dialog.findViewById(R.id.MyEditText);
String[] COUNTRIES = new String[] { "Belgium", "France", "Italy", "Germany", "Spain" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, COUNTRIES);
inputEditText.setAdapter(adapter);
inputEditText.setThreshold(1); //Set number of characters before the dropdown should be shown
//Create a new Tokenizer which will get text after '@' and terminate on ' '
inputEditText.setTokenizer(new Tokenizer() {
@Override
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 + " ");
TextUtils.copySpansFrom((Spanned) text, 0, text.length(), Object.class, sp, 0);
return sp;
} else {
return text + " ";
}
}
}
@Override
public int findTokenStart(CharSequence text, int cursor) {
int i = cursor;
while (i > 0 && text.charAt(i - 1) != '@') {
i--;
}
//Check if token really started with @, else we don't have a valid token
if (i < 1 || text.charAt(i - 1) != '@') {
return cursor;
}
return i;
}
@Override
public int findTokenEnd(CharSequence text, int cursor) {
int i = cursor;
int len = text.length();
while (i < len) {
if (text.charAt(i) == ' ') {
return i;
} else {
i++;
}
}
return len;
}
});
ワン「の問題を」これは、ポップアップがのEditTextビューの下に表示されることであると。それを上に移動し、現在あなたがこのような何かを行うことができます書かれているテキストの下に配置するには:
inputEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Layout layout = inputEditText.getLayout();
int pos = inputEditText.getSelectionStart();
int line = layout.getLineForOffset(pos);
int baseline = layout.getLineBaseline(line);
int bottom = inputEditText.getHeight();
inputEditText.setDropDownVerticalOffset(baseline - bottom);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
注:これは、現在では多くの行があることの場合には、ドロップダウン位置の世話をしていませんedittextが表示できるよりもedittext。
http://techdroid.kbeanie.com/2010/04/custom-autocomplete-for-android.htmlのために特定の単語 OnTextChangedListenerリスナーのアクションをクリックして指定しますアイデア ??? – Omarj
これのための箱の解決策はありません、1つの方法は、Facebookのアプリを逆コンパイルすることができ、コードを参照してください。利用可能なデコンパイラはたくさんあります。しかし、彼らが基本的にやっていることは、EditText Viewを拡張し、必要に応じてカスタマイズすることです。私はツイッターが同じことをすると思います。 – Nitin
@Nitin:他の人の仕事を逆コンパイルしたいとは思っていません。それに、たとえ私がそれをやろうとしていたとしても、せいぜいXMLだけを得るだろう。私が信じているJAVAは必要ではありません。 –