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 olarak tamamlanan örnek

Genel bakış

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

Bu öğreticide bir AutoCompleteTextView oluşturacaksınız ü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>

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

Eğitmen

Merhaba AutoCompleteadlı yeni bir proje başlatın.

list_item.xml adlı bir XML dosyası oluşturun ve kaynakları/düzen klasörünün içine kaydedin. Bu dosyanın derleme eylemini AndroidResourceolarak ayarlayın. 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, öneriler listesinde görüntülenen her öğe için kullanılacak basit bir TextView 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 OnCreate() için aşağıdaki kodu ekleyin 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üzenine ayarlandıktan sonra AutoCompleteTextView pencere öğesi FindViewByIddüzenden yakalanır. Daha sonra list_item.xml yerleşimini COUNTRIES dize dizisindeki her liste öğesine bağlamak için yeni bir ArrayAdapter başlatılır (bir sonraki adımda tanımlanmıştır). Son olarak, ArrayAdapter AutoCompleteTextView ilişkilendirmek için SetAdapter() çağırılır pencere öğesi, dize dizisinin öneri listesini doldurmasına olanak sağlayacak.

MainActivity sınıfının içinde, 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ı AutoCompleteTextView yazdığında bir açılan listede sağlanacak önerilerin listesidir pencere öğesi.

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

örnek "CA" içeren adların otomatik olarak tamamlanmasını sağlayan 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 AutoCompleteTextView odaklanmak için kullanılır pencere öğesi. Bunun yerine, uygulamanız bir XML dosyasında bu tür dize dizilerini bildirmelidir. Bu, proje res/values/strings.xml dosyanızdaki bir <string-array> kaynağıyla yapılabilir. Ö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>

ArrayAdapteriçin bu kaynak dizelerini kullanmak için özgün ArrayAdapter değiştirin 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);

Referanslar

Bu sayfanın kısımları, Android açık kaynak projesi 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 *.