AutoCompleteTextView và MultiAutocompleteTextView trong Android đều hỗ trợ cho người dùng những gợi ý liên quan khi bạn nhập vào trường EditText. Những gợi ý đó sẽ được hiển thị trong một menu thả xuống từ đó người dùng có thể chọn một item để thay thế cho nội dung của mình vừa nhập vào. Nhưng bạn đã phân biệt được sự khác nhau giữa AutoCompleteTextView và MultiAutocompleteTextView chưa? Hãy xem qua sự khác nhau dưới đây.
Khi sử dụng AutocompleteTextView nó sẽ hiển thị danh sách các gợi ý liên quan và bạn chỉ chọn được 1 gợi ý duy nhất từ danh sách đó. Còn khi sử dụng MultiAutocompleteTextView nó cũng đưa ra các gợi ý liên quan nhưng bạn có thể chọn được nhiều hơn từ danh sách hiển thị, các gợi ý này sẽ được phân cách bởi dấu phẩy. Bạn có thể xem qua ví dụ này để hiểu thêm.
Trong ví dụ trên mình sử dụng Autocomplete cho trường nhập vào Ngôn ngữ lập trình chính và sử dụng MultiAutocomplete cho trường nhập vào Ngôn ngữ lập trình bạn có thể biết, qua đó bạn có thể thấy rõ được sự khác nhau giữa AutoCompleteTextView và MultiAutocompleteTextView.
Một số phương thức trong AutoCompleteTextView:
- getAdapter() : Phương thức này trả về một Listadapter có thể lọc được được sử dụng cho Autocomplete.
- getCompletionHint() : Phương thức này trả về văn bản gợi ý tùy ý được hiển thị ở dưới danh sách kết nối.
- getDropDownAnchor() : Phương thức này trả về view id mà danh sách dropdown được neo tới.
- getListSelection() : Phương thức này trả về ị trí của lựa chọn, nếu có một.
- isPopupShowing() : This method indicates whether the popup menu is showing.
- setText(CharSequence text, boolean filter) : Phương thức này thiết lập văn bản ngoại trừ việc nó có thể vô hiệu hóa bộ lọc.
- showDropDown() : Phương thức này hiển thị dropdown trên màn hình.
Xem code tham khảo:
Cấu trúc XML của giao diện activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Họ tên" /> <EditText android:id="@+id/edHoTen" android:layout_width="match_parent" android:layout_height="wrap_content"> <requestFocus /> </EditText> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/editText" android:text="Ngôn ngữ lập trình chính" /> <AutoCompleteTextView android:id="@+id/atPrimaryLanguage" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/textView3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Ngôn ngữ bạn có thể biết" /> <MultiAutoCompleteTextView android:id="@+id/mtSecondLanguage" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btnSubmit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp" android:text="Submit" /> </LinearLayout>
Class xử lý MainActivity.java
package dev4u.com.autocompletetextviewdemo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.EditText; import android.widget.MultiAutoCompleteTextView; import android.widget.Toast; public class MainActivity extends Activity { private EditText edHoTen; private AutoCompleteTextView atPrimaryLanguage; private MultiAutoCompleteTextView mtSecondLanguage; private Button btnSubmit; private String[] primaryLanguage = {"Java", "CSharp", "JavaScript", "Swift", "C/C++"}; private String[] secondLanguage = {"Java", "CSharp", "JavaScript", "Swift", "C/C++"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edHoTen = (EditText) findViewById(R.id.edHoTen); atPrimaryLanguage = (AutoCompleteTextView) findViewById(R.id.atPrimaryLanguage); mtSecondLanguage = (MultiAutoCompleteTextView) findViewById(R.id.mtSecondLanguage); btnSubmit = (Button) findViewById(R.id.btnSubmit); ArrayAdapter adapterPrimaryLanguage = new ArrayAdapter(this, android.R.layout.simple_list_item_1, primaryLanguage); atPrimaryLanguage.setAdapter(adapterPrimaryLanguage); // Sét đặt số ký tự nhỏ nhất, để cửa sổ gợi ý hiển thị atPrimaryLanguage.setThreshold(1); ArrayAdapter adapterSecondLanguage = new ArrayAdapter(this, android.R.layout.simple_list_item_1, secondLanguage); mtSecondLanguage.setAdapter(adapterSecondLanguage); // Sét đặt số ký tự nhỏ nhất, để cửa sổ gợi ý hiển thị mtSecondLanguage.setThreshold(1); // Các đoạn text ngăn cách nhau bởi dấu phẩy. mtSecondLanguage.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); btnSubmit.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { submitForm(); } }); } private void submitForm() { String text = "Họ tên: " + this.edHoTen.getText().toString() + "\nNgôn LT ngữ chính: " + this.atPrimaryLanguage.getText().toString() + "\nNgôn LT ngữ phụ: " + this.mtSecondLanguage.getText().toString(); Toast.makeText(this, text, Toast.LENGTH_LONG).show(); } }
Các bạn chú ý ở 2 dòng này :
atPrimaryLanguage.setThreshold(1); và mtSecondLanguage.setThreshold(1);
Ý nghĩa của nó là thiết lập số ký tự bắt đầu lọc trong AutoComplete. Ở đây mình nhập là số 1 tức là chỉ cần 1 ký tự là nó bắt đầu lọc, còn nếu như bạn sửa thành 3 thì bạn nhập tới 3 ký tự vào nó mới bắt đầu lọc.
Lời kết
Qua ví dụ nhỏ trên chắc bạn cũng đã hiểu sơ qua về cách sử dụng AutocompleteTextView trong Android và MultiAutocompleteTextView trong Android như thế nào cũng như phân biệt được sự khác nhau giữa AutoCompleteTextView và MultiAutocompleteTextView, nếu có bất kỳ góp ý hay chia sẻ gì, mong bạn có thể để lại comment bên dưới hoặc gửi mail về [email protected]. Xin cảm ơn!!