Android自動補全教程

來源:互聯網
上載者:User

建立一個能自動補全提示的文本輸入控制項(widget),可以使用AutoCompleteTextView控制項。提示從與控制項關聯的ArrayAdapter提供的字串集合得到。

在這個教程中,你將要建立一個自動提示國家名字的AutoCompleteTextView。

啟動一個新項目並命名為HelloAutoComplete。

建立一個名為list_item.xml的XML檔案並把它儲存在res/layout/檔案夾下。編輯檔案像下面這樣:

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

這個檔案定義了一個簡單的TextView來顯示提示列表的每一項。

開啟 res/layout/main.xml檔案加入如下內容:

<?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控制項的標籤。

開啟HelloAutoComplete.java並在onCreate()函數中添加如下代碼: 

@Overrideprotected 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);}

把main.xml布局設定為內容視圖後,AutoCompleteTextView控制項就會在布局中用findViewById(int)找到。接下來,一個新的ArrayAdapter初始化並把

COUNTRIES字串數組(在下一步定義)的每個清單項目綁定到 list_item.xml布局。最後,調用setAdapter()將AutoCompleteTextView和ArrayAdapter關聯起來,這樣字串數組就能填充到提示列表中。

在HelloAutoComplete類中加入字串數組:

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

這就是當使用者在AutoCompleteTextView控制項輸入時提供給下拉式清單的提示。

啟動這個應用程式。

當你輸入時,你將會看到如下:

更多資訊
需要注意的是設計實踐中不建議寫入程式碼(hard-coded)字串數組,因為你的應用程式將關注於行為,而不是內容。應用程式的內容如字串會寫在代碼外部這樣做修改時就更方便和容易。這個教程中硬式編碼字串只是做個例子重點放在了AutoCompleteTextView控制項上。相反的,你的應用程式可以聲明這樣的字串數組在XML檔案中。這可以在你的項目中res/values/strings.xml 檔案裡用<string-array>資源來完成。請看下面樣本:

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

在ArrayAdapter使用這個資源字串,只需要替換原來的ArrayAdapter構造部分,像下面一樣:

String[] countries = getResources().getStringArray(R.array.countries_array);ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, countries);

原文在這裡。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.