Primero, convierta su EditText en un MultiAutoCompleteTextView. Un MultiAutoCompleteTextView le permite reemplazar ciertas partes del texto, por ejemplo, texto después de '@'.
El que puede hacer algo como esto:
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;
}
});
Un "problema" con esto es que la ventana emergente aparecerá bajo el punto de vista EditarTexto. Para moverlo hacia arriba y colocarlo bajo el texto que actualmente está escrito que puede hacer algo como esto:
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) {
}
});
Nota: Esto no tiene actualmente cuidar de la posición desplegable en el caso de que hay más líneas en el edittext que el edittext puede mostrar.
http://techdroid.kbeanie.com/2010/04/custom-autocomplete-for-android.html Algo como esto puede que le ayude a conseguir la idea ??? – Omarj
No hay una solución lista para usar, una de las formas es que puede descompilar la aplicación de Facebook y ver el código. Hay muchos decompiladores disponibles. Pero lo que básicamente hacen es ampliar la vista de texto y personalizarla de acuerdo con sus necesidades. Creo que Twitter hace lo mismo. – Nitin
@Nitin: no estoy del todo seguro de que me gustaría compilar el trabajo de otra persona. Además, incluso si tuviera que hacerlo, en el mejor de los casos, solo obtendría sus XML. No es su JAVA que creo que es lo que es necesario. –