Android SDK Tutorials系列 - Hello Views - Auto Complete
2011-11-16 22:40
330 查看
Auto Complete
要创建一个带有自动补全提示功能的文本输入框,可以使用AutoCompleteTextView小部件。
本教程里,将创建一个
AutoCompleteTextView自动补全小部件,能提示国家名字。
创建一个工程:HelloAutoComplete.
在res/layout/目录下创建
list_item.xml
文件,内容如下:
<?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()方法如下:
@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); }
加载布局文件main.xml后,通过findViewById(int) 方法获得对
AutoCompleteTextView小部件的引用。创建一个ArrayAdapter将布局文件list_item.xml和字符串数组
COUNTRIES(下一步定义)绑定在一起。最后,调用
setAdapter()将ArrayAdapter和
AutoCompleteTextView关联起来,这样字符串数组的内容就能出现在提示列表里面。
在类
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小部件输入字符时,一个下拉列表会列出匹配到的国名。
运行应用。
当你输入字符时,你应该看类似下图的内容:
More Information
注意,不提倡在实践中使用硬编码的字符串数组,因为应用代码应该注重业务逻辑,而不是内容。应用的内容例如字符串应该放在代码外面的资源文件里面,这样很方便修改内容,且有助于将内容国际化。这里使用硬编码的字符串数组是为了简化教程,把重点放在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的代码行修改如下:
String[] countries = getResources().getStringArray(R.array.countries_array); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, countries);
SDK Tutorials系列 - Hello Views
转载请注明出处:/article/11130789.html
相关文章推荐
- Android SDK Tutorials系列 - Hello Views - Spinner
- Android SDK Tutorials系列 - Hello Views - Tab Layout
- Android SDK Tutorials系列 - Hello Localization
- Android设计模式系列(5)--SDK源码之备忘录模式
- Android设计模式系列(12)--SDK源码之生成器模式(建造者模式)
- Android设计模式系列(12)--SDK源码之生成器模式(建造者模式)
- Android SDK Tutorials系列 - Hello Views - List View
- 一---Android-SDK系列文章(1)
- 【贪吃蛇—Java程序员写Android游戏】系列 1.Android SDK Sample-Snake详解
- Gstreamer tutorials 引用SDK 【android 应用】
- Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)
- Android设计模式系列(8)--SDK源码之工厂方法模式
- [译文]Hello Views - Android SDK Tutorials系列
- Android设计模式系列(1)--SDK源码之组合模式
- Android设计模式系列(5)--SDK源码之备忘录模式
- Android SDK Tutorials系列 - Hello Views - Date Picker
- Android设计模式系列(10)--SDK源码之原型模式
- Android设计模式系列(1)--SDK源码之组合模式
- Android设计模式系列(7)--SDK源码之命令模式
- Android设计模式系列(10)--SDK源码之原型模式