Automatické dokončování pro Xamarin.Android
AutoCompleteTextView
je upravitelný prvek textového zobrazení, který při psaní uživatele automaticky zobrazuje návrhy dokončení. Seznam návrhů se zobrazí v rozevírací nabídce, ze které může uživatel zvolit položku, která má nahradit obsah textového pole.
Přehled
Pokud chcete vytvořit widget pro zadávání textu, který poskytuje návrhy automatického dokončování, použijte AutoCompleteTextView
Widget. Návrhy se přijímají z kolekce řetězců přidružených k widgetu prostřednictvím objektu ArrayAdapter
.
V tomto kurzu vytvoříte AutoCompleteTextView
widget, který poskytuje návrhy pro název země.
<?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>
Jedná se TextView
o popisek, který představuje AutoCompleteTextView
Widget.
Kurz
Spusťte nový projekt s názvem HelloAutoComplete.
Vytvořte soubor XML s názvem list_item.xml
a uložte ho do složky Resources/Layout . Nastavte akci sestavení tohoto souboru na AndroidResource
hodnotu . Upravte soubor tak, aby vypadal takto:
<?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>
Tento soubor definuje jednoduchou položku TextView
, která se použije pro každou položku, která se zobrazí v seznamu návrhů.
Otevřete Prostředky/Layout/Main.axml a vložte následující:
<?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>
Otevřete MainActivity.cs a vložte následující kód pro OnCreate()
Metoda:
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// Set our view from the "Main" layout resource
SetContentView (Resource.Layout.Main);
AutoCompleteTextView textView = FindViewById<AutoCompleteTextView> (Resource.Id.autocomplete_country);
var adapter = new ArrayAdapter<String> (this, Resource.Layout.list_item, COUNTRIES);
textView.Adapter = adapter;
}
Po nastavení zobrazení obsahu na main.xml
rozložení se zobrazí AutoCompleteTextView
widget je zachycen z rozložení s FindViewById
. Potom se inicializuje list_item.xml
nová ArrayAdapter
vazba rozložení na každou položku seznamu v COUNTRIES
poli řetězců (definovaná v dalším kroku). Nakonec je volána k SetAdapter()
přidružení ArrayAdapter
AutoCompleteTextView
widget, aby pole řetězců naplnilo seznam návrhů.
MainActivity
Do třídy přidejte pole řetězců:
static 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"
};
Toto je seznam návrhů, které se zobrazí v rozevíracím seznamu, když uživatel zadá do AutoCompleteTextView
Widget.
Aplikaci spusťte. Při psaní byste měli vidět něco takového:
Další informace
Všimněte si, že použití pevně zakódovaného pole řetězců není doporučeným postupem návrhu, protože kód aplikace by se měl soustředit na chování, nikoli na obsah. Obsah aplikace, jako jsou řetězce, by se měl z kódu externalizovat, aby se usnadnily úpravy obsahu a usnadnily lokalizaci obsahu. Pevně zakódované řetězce se v tomto kurzu používají pouze k tomu, aby byly jednoduché a zaměřily se na AutoCompleteTextView
Widget. Místo toho by vaše aplikace měla deklarovat taková pole řetězců v souboru XML. Můžete to udělat pomocí <string-array>
zdroje v souboru projektu res/values/strings.xml
. Příklad:
<?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>
Chcete-li použít tyto řetězce prostředků pro položku ArrayAdapter
, nahraďte původní ArrayAdapter
konstruktor line with the following:
string[] countries = Resources.GetStringArray (Resource.array.countries_array);
var adapter = new ArrayAdapter<String> (this, Resource.layout.list_item, countries);
Reference
- Recept AutoCompleteTextView – ukázkový projekt Xamarin.Android pro
AutoCompleteTextView
ArrayAdapter
AutoCompleteTextView
Části této stránky jsou upraveny na základě práce vytvořené a sdílené opensourcový projekt Androidu a používají se podle podmínek popsaných v licenci Creative Commons 2.5 Atribution License. Tento kurz je založený na kurzu automatického dokončování Androidu*.