一步一步学android控件(之五) —— AutoCompleteTextView
2013-10-30 21:46
411 查看
android 控件众多 , 额 , 具体多少个呢? 貌似有那么几十个吧,也没做个统计,嘿嘿!......
有木有朋友感觉写了那么长时间的android代码,有时候想写点自己的东西的时候却发现自己好像离不开网络耶,什么都需要先到网络上遨游一番才能解决自己的问题。思前想后,个人觉得还是有必要巩固一下自己学习过的东西——想想以前这些东西,自己都写过一遍了,但是折腾一段时间下来都不知道放哪里去了........
好了,废话不多说了,这次准备重新学习一下android的常用控件TextView、EditText、AutoCompleteTextView、Button、CalendarView、CheckBox、Chronometer、CompoundButton、DatePicker、DigitalClock、ExpandableListView、Gallery、GridView、HorizontalScrollView、ImageButton、ImageSwitcher、ImageView、ListPopupWindow、ListView、MultiAutoCompleteTextView、NumberPicker、PopupMenu、PopupWindow、ProgressBar、QuickContactBadge、RadioButton、RadioGroup、RatingBar、RemoteViews、ScrollView、SearchView、SeekBar、SlidingDarwer、Switch、TableHost、TextClock、TextSwitcher、TimePicker、Toast、ToggleButton、VideoView、ViewFlipper、ViewSwitcher、ZoomButton等控件。
今天学习的控件——AutoCompleteTextView , AutoCompleteTextView控件的作用是什么呢? AutoComplete(自动完成),这里大家叫他自动补全—— 当在EditText中输入字符时他将去去一个集合中搜索出满足条件的项,然后列出这些项。在官方文档里给的例子是这样的
好吧,今天就按照这个样例简单实现AutoCompleteTextView,只不过我们要将这里的COUNTIES 换成我们自己想要的内容——在这里我们关心的是整个系统中的文件名称。
先看看效果图:
下面就一步一步来实现上述功能
1、准备必须的布局文件——auto_complete_textview_detail.xml
该文件中只包含一个View ——AutoCompleteTextView 。
2、 创建activity ——WidgetAutoCompleteActivity.java
这个文件处理了所有想要做的事,在OnCreate函数中 new FileSearchTask().execute(); 启动一个异步线程在后台例举出所有的文件名称(在这个过程中AutoCompleteTextView是不可用的),加载完成后准备Adapter
由于AutoCompleteTextView默认是最少两个字符才进行处理, 想要输入一个字符就进行处理——加入下面这句话
3、重点已经完成,下面就添加剩余的代码以符合整个工程的架构。
3.1 在ViewData中加入如下内容
3.2 在WidgetsAdapter的handleItemClicked 函数中添加如下内容:
不想太死板,我想要更炫的效果,ok 满足你 ^_^!
首先修改上文中mAutoAdapter的构造
上面代码中看到使用了布局文件auto_complete_item和其内部定义的一个id叫auto_item_file_name的View,下面是文件内容
注意:该布局中的TextView是必须的不能换成其他的View , 否则将报ClassCastException。
TextView使用的背景Widget_button_drawable的定义参见一步一步学android控件(之三) —— Button 。TextView 使用的字体颜色是心添加的 ,定义在widget_color.xml文件中
新的效果如下图
AutoCompleteTextView到这里就完了 , 对后面的内容有不清楚的地方参见点击打开一步一步学android控件(之一) —— 开始篇。 下一个控件MultiAutoCompleteTextView。
有木有朋友感觉写了那么长时间的android代码,有时候想写点自己的东西的时候却发现自己好像离不开网络耶,什么都需要先到网络上遨游一番才能解决自己的问题。思前想后,个人觉得还是有必要巩固一下自己学习过的东西——想想以前这些东西,自己都写过一遍了,但是折腾一段时间下来都不知道放哪里去了........
好了,废话不多说了,这次准备重新学习一下android的常用控件TextView、EditText、AutoCompleteTextView、Button、CalendarView、CheckBox、Chronometer、CompoundButton、DatePicker、DigitalClock、ExpandableListView、Gallery、GridView、HorizontalScrollView、ImageButton、ImageSwitcher、ImageView、ListPopupWindow、ListView、MultiAutoCompleteTextView、NumberPicker、PopupMenu、PopupWindow、ProgressBar、QuickContactBadge、RadioButton、RadioGroup、RatingBar、RemoteViews、ScrollView、SearchView、SeekBar、SlidingDarwer、Switch、TableHost、TextClock、TextSwitcher、TimePicker、Toast、ToggleButton、VideoView、ViewFlipper、ViewSwitcher、ZoomButton等控件。
今天学习的控件——AutoCompleteTextView , AutoCompleteTextView控件的作用是什么呢? AutoComplete(自动完成),这里大家叫他自动补全—— 当在EditText中输入字符时他将去去一个集合中搜索出满足条件的项,然后列出这些项。在官方文档里给的例子是这样的
public class CountriesActivity extends Activity { protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.countries); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, COUNTRIES); AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.countries_list); textView.setAdapter(adapter); } private static final String[] COUNTRIES = new String[] { "Belgium", "France", "Italy", "Germany", "Spain" }; }
好吧,今天就按照这个样例简单实现AutoCompleteTextView,只不过我们要将这里的COUNTIES 换成我们自己想要的内容——在这里我们关心的是整个系统中的文件名称。
先看看效果图:
下面就一步一步来实现上述功能
1、准备必须的布局文件——auto_complete_textview_detail.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <AutoCompleteTextView android:id="@+id/show_auto_complete_textview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp"> <requestFocus /> </AutoCompleteTextView> </LinearLayout>
该文件中只包含一个View ——AutoCompleteTextView 。
2、 创建activity ——WidgetAutoCompleteActivity.java
package com.xy.zt.selfdefinewieget; import java.io.File; import java.util.ArrayList; import java.util.LinkedList; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; public class WidgetAutoCompleteActivity extends Activity { private AutoCompleteTextView mShowAuto; private ArrayAdapter<String> mAutoAdapter; private class FileSearchTask extends AsyncTask<Void, Void, String[]> { @Override protected void onPostExecute(String[] result) { if (result == null || result.length == 0) { return; } mShowAuto.setEnabled(true); if (mAutoAdapter == null) { mAutoAdapter = new ArrayAdapter<String>( WidgetAutoCompleteActivity.this, android.R.layout.simple_dropdown_item_1line, result); mShowAuto.setAdapter(mAutoAdapter); } } @Override protected String[] doInBackground(Void... params) { File rootDir = Environment.getRootDirectory(); LinkedList<File> queue = new LinkedList<File>(); ArrayList<String> result = new ArrayList<String>(); queue.offer(rootDir); File tmpFile, tmpDirAllFile[]; while ((tmpFile = queue.poll()) != null) { if (tmpFile.isDirectory()) { tmpDirAllFile = tmpFile.listFiles(); if (tmpDirAllFile != null) { for (File f : tmpDirAllFile) { queue.offer(f); } } } else { result.add(tmpFile.getName()); } } String[] tmpFileNames = new String[result.size()]; result.toArray(tmpFileNames); result.clear(); result = null; queue = null; return tmpFileNames; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.auto_complete_textview_detail); init(); new FileSearchTask().execute(); } private void init() { mShowAuto = (AutoCompleteTextView) findViewById(R.id.show_auto_complete_textview); mShowAuto.setEnabled(false); mShowAuto.setThreshold(1); } }
这个文件处理了所有想要做的事,在OnCreate函数中 new FileSearchTask().execute(); 启动一个异步线程在后台例举出所有的文件名称(在这个过程中AutoCompleteTextView是不可用的),加载完成后准备Adapter
mAutoAdapter = new ArrayAdapter<String>( WidgetAutoCompleteActivity.this, android.R.layout.simple_dropdown_item_1line, result); mShowAuto.setAdapter(mAutoAdapter);
由于AutoCompleteTextView默认是最少两个字符才进行处理, 想要输入一个字符就进行处理——加入下面这句话
mShowAuto.setThreshold(1);
3、重点已经完成,下面就添加剩余的代码以符合整个工程的架构。
3.1 在ViewData中加入如下内容
public static final int AUTO_COMPLETE_TEXTVIEW_ID = EDIT_TEXT_ID +1 ; public static final String AUTO_COMPLETE_TEXTVIEW_NAME = "AutoCompleteTextView"; private static final ViewData mAutoCompleteTextView = new ViewData(AUTO_COMPLETE_TEXTVIEW_NAME, AUTO_COMPLETE_TEXTVIEW_ID); View_Datas.add(mAutoCompleteTextView);
3.2 在WidgetsAdapter的handleItemClicked 函数中添加如下内容:
case ViewData.AUTO_COMPLETE_TEXTVIEW_ID: intent.setClass(mContext, WidgetAutoCompleteActivity.class); mContext.startActivity(intent); break;
不想太死板,我想要更炫的效果,ok 满足你 ^_^!
首先修改上文中mAutoAdapter的构造
mAutoAdapter = new ArrayAdapter<String>( WidgetAutoCompleteActivity.this, R.layout.auto_complete_item, R.id.auto_item_file_name,result);
上面代码中看到使用了布局文件auto_complete_item和其内部定义的一个id叫auto_item_file_name的View,下面是文件内容
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/auto_item_file_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:background="@drawable/widget_button_drawable" android:textColor="@color/auto_complete_font_color" android:paddingTop="10dp" android:paddingBottom="10dp" android:textSize="16sp" /> </LinearLayout>
注意:该布局中的TextView是必须的不能换成其他的View , 否则将报ClassCastException。
TextView使用的背景Widget_button_drawable的定义参见一步一步学android控件(之三) —— Button 。TextView 使用的字体颜色是心添加的 ,定义在widget_color.xml文件中
<color name="auto_complete_font_color">#FFCC00</color>
新的效果如下图
AutoCompleteTextView到这里就完了 , 对后面的内容有不清楚的地方参见点击打开一步一步学android控件(之一) —— 开始篇。 下一个控件MultiAutoCompleteTextView。
相关文章推荐
- Android之旅七 Service简介
- android多lib库工程的自动批量构建--编写ant脚本
- android编程之ExpandableListView使用总结
- android提高——自定义控件(button)
- Android 多分辨率屏显设计及其兼容性测试
- Android操作系统源代码下载方法
- android帧布局以及注意事项
- Android系统启动过程
- Android中音乐播放器实现歌词同步显示
- android:allowTaskReparenting实例
- Android接收短信并读取
- android luncher布局修改
- android开发小功能(2)
- android开发小功能(1)
- android 焦点问题的汇总
- android中PopupWindow的应用实例
- android AsyncTask 在项目中的特殊用法
- Android系统启动流程分析
- android Layout_weight属性的详解
- Android里加载音频soundpool出现错误:Sample 1 not Ready解决方法