Trước tiên, hãy chỉnh sửa EditText của bạn thành một MultiAutoCompleteTextView. Một MultiAutoCompleteTextView cho phép bạn thay thế các phần nhất định của văn bản, ví dụ như văn bản sau '@'.
Các bạn có thể làm một cái gì đó như thế này:
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;
}
});
Một "vấn đề" với điều này là popup sẽ xuất hiện dưới cái nhìn EditText. Để di chuyển nó lên và đặt nó dưới văn bản mà hiện tại đang viết cho bạn có thể làm một cái gì đó như thế này:
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) {
}
});
Lưu ý: Đây không hiện chăm sóc của vị trí thả xuống trong trường hợp đó có nhiều dòng trong edittext so với edittext có thể hiển thị.
http://techdroid.kbeanie.com/2010/04/custom-autocomplete-for-android.html Điều gì đó giống như vậy có thể giúp bạn Ý tưởng ??? – Omarj
Không có giải pháp hộp cho việc này, một cách là bạn có thể dịch ngược ứng dụng Facebook và xem mã. Có rất nhiều trình giải mã có sẵn. Nhưng những gì họ đang làm cơ bản là mở rộng EditText View và tùy biến nó theo nhu cầu của họ. Tôi nghĩ rằng twitter cũng vậy. – Nitin
@Nitin: Tôi không hoàn toàn chắc chắn rằng tôi muốn loại bỏ tác phẩm của người khác. Bên cạnh đó, ngay cả khi tôi đã làm điều đó, tốt nhất, tôi sẽ chỉ nhận được XML của họ. Không phải JAVA của họ mà tôi tin là điều cần thiết. –