Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 一步一步學android控件(之五) —— AutoCompleteTextView

一步一步學android控件(之五) —— AutoCompleteTextView

編輯:關於Android編程

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中輸入字符時他將去去一個集合中搜索出滿足條件的項,然後列出這些項。在官方文檔裡給的例子是這樣的   [java]   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   [html]   <?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   [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  [java]   mAutoAdapter = new ArrayAdapter<String>(                           WidgetAutoCompleteActivity.this,                           android.R.layout.simple_dropdown_item_1line, result);                   mShowAuto.setAdapter(mAutoAdapter);     由於AutoCompleteTextView默認是最少兩個字符才進行處理, 想要輸入一個字符就進行處理——加入下面這句話 [java]  mShowAuto.setThreshold(1);     3、重點已經完成,下面就添加剩余的代碼以符合整個工程的架構。 3.1 在ViewData中加入如下內容   [java]   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 函數中添加如下內容: [java]   case ViewData.AUTO_COMPLETE_TEXTVIEW_ID:               intent.setClass(mContext, WidgetAutoCompleteActivity.class);               mContext.startActivity(intent);               break;     不想太死板,我想要更炫的效果,ok 滿足你 ^_^!   首先修改上文中mAutoAdapter的構造   [java]  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,下面是文件內容 [html]  <?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文件中   [html]  <color name="auto_complete_font_color">#FFCC00</color>
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved