174 lines
8.5 KiB
Plaintext
174 lines
8.5 KiB
Plaintext
|
page.title=Auto Complete
|
||
|
parent.title=Hello, Views
|
||
|
parent.link=index.html
|
||
|
@jd:body
|
||
|
|
||
|
<p>To create a text entry widget that provides auto-complete suggestions, use
|
||
|
the {@link android.widget.AutoCompleteTextView} widget. Suggestions are received from a
|
||
|
collection of strings associated with the widget through an {@link
|
||
|
android.widget.ArrayAdapter}.</p>
|
||
|
|
||
|
<p>In this tutorial, you will create a {@link android.widget.AutoCompleteTextView} widget that
|
||
|
provides suggestions for a country name.</p>
|
||
|
|
||
|
|
||
|
<ol>
|
||
|
<li>Start a new project named <em>HelloAutoComplete</em>.</li>
|
||
|
<li>Create an XML file named <code>list_item.xml</code> and save it inside the
|
||
|
<code>res/layout/</code> folder. Edit the file to look like this:
|
||
|
<pre>
|
||
|
<?xml version="1.0" encoding="utf-8"?>
|
||
|
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||
|
android:layout_width="fill_parent"
|
||
|
android:layout_height="fill_parent"
|
||
|
android:padding="10dp"
|
||
|
android:textSize="16sp"
|
||
|
android:textColor="#000">
|
||
|
</TextView>
|
||
|
</pre>
|
||
|
<p>This file defines a simple {@link android.widget.TextView} that will be used for each
|
||
|
item that appears in the list of suggestions.</p>
|
||
|
</li>
|
||
|
<li>Open the <code>res/layout/main.xml</code> file and insert the following:
|
||
|
<pre>
|
||
|
<?xml version="1.0" encoding="utf-8"?>
|
||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||
|
android:orientation="horizontal"
|
||
|
android:layout_width="fill_parent"
|
||
|
android:layout_height="wrap_content"
|
||
|
android:padding="5dp">
|
||
|
<TextView
|
||
|
android:layout_width="wrap_content"
|
||
|
android:layout_height="wrap_content"
|
||
|
android:text="Country" />
|
||
|
<AutoCompleteTextView android:id="@+id/autocomplete_country"
|
||
|
android:layout_width="fill_parent"
|
||
|
android:layout_height="wrap_content"
|
||
|
android:layout_marginLeft="5dp"/>
|
||
|
</LinearLayout>
|
||
|
</pre>
|
||
|
<p>The {@link android.widget.TextView} is a label that introduces the {@link
|
||
|
android.widget.AutoCompleteTextView} widget.
|
||
|
</li>
|
||
|
|
||
|
<li>Open <code>HelloAutoComplete.java</code> and insert the following code for the {@link
|
||
|
android.app.Activity#onCreate(Bundle) onCreate()} method:
|
||
|
<pre>
|
||
|
@Override
|
||
|
protected void onCreate(Bundle savedInstanceState) {
|
||
|
super.onCreate(savedInstanceState);
|
||
|
setContentView(R.layout.main);
|
||
|
|
||
|
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
|
||
|
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES);
|
||
|
textView.setAdapter(adapter);
|
||
|
}
|
||
|
</pre>
|
||
|
|
||
|
<p>After the content view is set to the <code>main.xml</code> layout, the {@link
|
||
|
android.widget.AutoCompleteTextView} widget is captured from the layout with {@link
|
||
|
android.app.Activity#findViewById(int)}. A new {@link
|
||
|
android.widget.ArrayAdapter} is then initialized to bind the <code>list_item.xml</code> layout
|
||
|
to each list item in the <code>COUNTRIES</code> string array (defined in the next step).
|
||
|
Finally, {@link android.widget.AutoCompleteTextView#setAdapter(T) setAdapter()} is called to
|
||
|
associate the {@link android.widget.ArrayAdapter} with the
|
||
|
{@link android.widget.AutoCompleteTextView} widget so that the string array will populate
|
||
|
the list of suggestions.</p>
|
||
|
</li>
|
||
|
|
||
|
<li>Inside the <code>HelloAutoComplete</code> class, add the string array:
|
||
|
<pre>
|
||
|
static final String[] COUNTRIES = new String[] {
|
||
|
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
|
||
|
"Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
|
||
|
"Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
|
||
|
"Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
|
||
|
"Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
|
||
|
"Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
|
||
|
"British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
|
||
|
"Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
|
||
|
"Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
|
||
|
"Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
|
||
|
"Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
|
||
|
"Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
|
||
|
"East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
|
||
|
"Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
|
||
|
"Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
|
||
|
"French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
|
||
|
"Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
|
||
|
"Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
|
||
|
"Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
|
||
|
"Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
|
||
|
"Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
|
||
|
"Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
|
||
|
"Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
|
||
|
"Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
|
||
|
"Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
|
||
|
"Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
|
||
|
"Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
|
||
|
"Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
|
||
|
"Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
|
||
|
"Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
|
||
|
"Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
|
||
|
"Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
|
||
|
"Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
|
||
|
"Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
|
||
|
"Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
|
||
|
"The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
|
||
|
"Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
|
||
|
"Ukraine", "United Arab Emirates", "United Kingdom",
|
||
|
"United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
|
||
|
"Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
|
||
|
"Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
|
||
|
};
|
||
|
</pre>
|
||
|
<p>This is the list of suggestions that will be provided in a drop-down list when the user types into
|
||
|
the {@link android.widget.AutoCompleteTextView} widget.</p>
|
||
|
</li>
|
||
|
|
||
|
<li>Run the application.</li>
|
||
|
</ol>
|
||
|
<p>As you type, you should see something like this:</p>
|
||
|
<img src="images/hello-autocomplete.png" width="150px" />
|
||
|
|
||
|
|
||
|
<h2>More Information</h2>
|
||
|
|
||
|
<p>Note that using a hard-coded string array is not a recommended design practice because your
|
||
|
application code should focus on behavior, not content. Application content such as strings
|
||
|
should be externalized from the code in order to make modifications to the content easier and
|
||
|
facilitate localization of the content. The hard-coded strings are used in this tutorial only to
|
||
|
make it simple and focus on the {@link android.widget.AutoCompleteTextView} widget.
|
||
|
Instead, your application should declare such string arrays in an XML file. This can be done
|
||
|
with a {@code <string-array<} resource in your project {@code res/values/strings.xml} file.
|
||
|
For example:</p>
|
||
|
<pre>
|
||
|
<?xml version="1.0" encoding="utf-8"?>
|
||
|
<resources>
|
||
|
<string-array name="countries_array">
|
||
|
<item>Bahrain</item>
|
||
|
<item>Bangladesh</item>
|
||
|
<item>Barbados</item>
|
||
|
<item>Belarus</item>
|
||
|
<item>Belgium</item>
|
||
|
<item>Belize</item>
|
||
|
<item>Benin</item>
|
||
|
</string-array>
|
||
|
</resources>
|
||
|
</pre>
|
||
|
<p>To use these resource strings for the {@link android.widget.ArrayAdapter}, replace the original
|
||
|
{@link android.widget.ArrayAdapter} constructor line with the following:</p>
|
||
|
<pre>
|
||
|
String[] countries = getResources().getStringArray(R.array.countries_array);
|
||
|
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, countries);
|
||
|
</pre>
|
||
|
|
||
|
|
||
|
<h3>References</h3>
|
||
|
<ul>
|
||
|
<li>{@link android.widget.ArrayAdapter}</li>
|
||
|
<li>{@link android.widget.AutoCompleteTextView}</li>
|
||
|
</ul>
|
||
|
|
||
|
|