Xamarin. Android için otomatik tamamlanma

AutoCompleteTextView , Kullanıcı yazarken tamamlanma önerilerini otomatik olarak gösteren düzenlenebilir bir metin görünümü öğesidir. Öneri listesi, kullanıcının düzenleme kutusunun içeriğini ile değiştirmek için bir öğe seçebileceği açılan menüde görüntülenir.

Otomatik tamamlanma örneği.

Genel Bakış

Otomatik Tamam önerileri sağlayan bir metin girişi pencere öğesi oluşturmak için, şunu kullanın AutoCompleteTextView pencere öğesi. Öneriler, pencere öğesiyle ilişkili dizelerin bir koleksiyonundan alınır ArrayAdapter .

Bu öğreticide, bir AutoCompleteTextView ülke adı için öneriler sağlayan pencere öğesi.

<?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>

, Şunu TextView tanıtan bir etikettir AutoCompleteTextView pencere öğesi.

Öğretici

Merhaba AutoComplete adlı yeni bir proje başlatın.

Adlı bir XML dosyası oluşturun list_item.xml ve kaynakları/düzen klasörünün içine kaydedin. Bu dosyanın derleme eylemini olarak ayarlayın AndroidResource . Dosyayı şu şekilde düzenleyin:

<?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> 

Bu dosya TextView , öneriler listesinde görünen her öğe için kullanılacak basit bir tanımlar.

Kaynakları/düzeni/Main. axml ' i açın ve aşağıdakileri ekleyin:

<?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>

MainActivity. cs ' i açın ve şu kodu ekleyin OnCreate() yöntemidir

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;
}

İçerik görünümü main.xml düzene ayarlandığında, AutoCompleteTextView pencere öğesi ile düzenden yakalanır FindViewById . ArrayAdapterDaha sonra, list_item.xml düzeni dize dizisindeki her bir liste öğesine bağlamak için başlatılır (bir COUNTRIES sonraki adımda tanımlanmıştır). Son olarak, SetAdapter() ile ilişkilendirmek için çağrılır ArrayAdapterAutoCompleteTextView pencere öğesi, dize dizisinin öneri listesini doldurmasına olanak sağlayacak.

Sınıfının içinde MainActivity , dize dizisini ekleyin:

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"
};

Bu, Kullanıcı öğesine yazdığında bir açılan listede sağlanacak önerilerin listesidir AutoCompleteTextView pencere öğesi.

Uygulamayı çalıştırın. Yazarken şöyle bir şey görmeniz gerekir:

Örnek "CA" içeren adların listelendiği otomatik tam ekran görüntüsü.

Daha Fazla Bilgi

Sabit kodlanmış dize dizisinin kullanılması önerilen bir tasarım uygulaması değildir, çünkü uygulama kodunuz içeriğe değil davranışa odaklanmalıdır. İçerik üzerinde değişiklik yapmak ve içeriğin yerelleştirilmesini kolaylaştırmak için, dizeler gibi uygulama içeriğinin koddan externalized olması gerekir. Sabit kodlanmış dizeler bu öğreticide yalnızca basit hale getirmek ve bu öğreticide odaklanmak için kullanılır AutoCompleteTextView pencere öğesi. Bunun yerine, uygulamanız bir XML dosyasında bu tür dize dizilerini bildirmelidir. Bu, <string-array> proje dosyanızdaki bir kaynakla yapılabilir res/values/strings.xml . Örneğin:

<?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>

İçin bu kaynak dizelerini kullanmak üzere, ArrayAdapter orijinalin yerine ArrayAdapter Aşağıdaki ile bir Oluşturucu satırı:

string[] countries = Resources.GetStringArray (Resource.array.countries_array);
var adapter = new ArrayAdapter<String> (this, Resource.layout.list_item, countries);

Başvurular

bu sayfanın bölümleri, Android açık kaynak Project tarafından oluşturulan ve paylaşılan çalışmaya ve Creative Commons 2,5 attribution lisansındaaçıklanan koşullara göre kullanılan değişikliklere göre değişiklik yapılmasıdır. Bu öğretici, Android otomatik tamamlanma öğreticisine dayanır *.