Android--UI之AutoCompleteTextView

來源:互聯網
上載者:User

前言

  之前講過EditText,有興趣的朋友可以看一下。這篇部落客要說明的是自動完成文字框,它實際上也是一個文本編輯框,可以理解為對EditText功能的擴充,它對輸入的內容可以進行提示並且自動完成。本文會講解常用屬性設定,以及如何向AutoCompleteTextView增加提示資料,最後將使用一個demo示範一下。  

 

說明

  自動完成文字框(AutoCompleteTextView),可以從官方文檔上看出,是從EditText繼承而來,所以它實際上也是一個文本編輯框,只是多了一個自動提示輸入補全的功能。功能類似於:當使用者輸入一定字元之後,自動完成文字框會顯示一個下拉式清單,供使用者從中選擇,當使用者選擇某個功能表項目之後,AutoCompleteTextView會按照的選擇自動填寫該文字框。

 

常用屬性

  因為是繼承自EditText,所以AutoCompleteTextView除了可以使提供用Edit的屬性和方法之外,還支援如下一些特殊的屬性及方法,這裡只介紹一些常用的,具體請參見官方文檔:

android:completionHint/setCompletionHint(CharSequence):設定出現下拉式清單的提示標題。
android:completionTjreshold/setThreshold(int):設定至少輸入幾個字元才會顯示提示。
android:dropDownHeight/setDropHeight(int):設定下拉式清單的高度。
android:dropDownWidth/setDropWidth(int):設定下拉式清單的寬度。
android:popupBackground/setDropDownbackgroundResource(int):設定下拉式清單的背景。
 

填充選擇資料

  在Android程式中,為了展示資料,通常會用到一個Adapter的介面。沒錯,這是一個介面,是串連後端資料和最上層顯示的橋樑,是data souce和UI(View)之間一個重要的紐帶。展示了Adapter在Android程式中的關係:

 

  對於Adapter,它是一個介面,Android為其聲明了各種實作類別,對於在AutoCompleteTextView控制項中,一般使用ArrayAdapter<T>即可完成功能,對於一些其他實作類別的應用情境,以後會慢慢介紹。

  ArrayAdapter<T>繼承自一個抽象類別BaseAdapter,而這個抽象類別實現了Adapter介面,所以繼承關係應該是:Adapter→BaseAdater→ArrayAdapter<T>。

  從名字上可以看出,ArrayAdapter<T>是以一個數組的形式去儲存資料的,它也確實是這麼做的,並且可以傳遞一個數組對其進行構造。所以我們只需要填充一個數組對象,就完成ArrayAdapter對象的初始化工作,在把得到的ArrayAdapter對象傳遞給AutoCompleteTextView控制項,即可對其進行選擇資料設定。

MultiAutoCompleteTextView  

  既然講到了AutoCompleteTextView,那就順帶講一下MultiAutoCompleteTextView,它繼承自AutoCompleteTextView。新擴充的功能是:可以進行多次提示,並且每次指定完成的內容通過符號進行分隔顯示。使用MultiAutoCompleteTextView必須實現一個MultiAutoCompleteTextView.Tokenizer介面,用於聲明用於選項與選項之間分隔的符號,一般如不特殊指定,可以使用Android為我們提供的實作類別MultiAutoCompleteTextView.CommaTokenizer,它設定使用英文逗號","進行分隔選項。

 

demo

  下面建立一個Android項目來示範一下上面講到的內容,提供兩個輸入框,AutoCompleteTextView和MultiAutoCompleteTextView,然後對其進行“著名城市”的資料填充,並且進行示範,詳細的在代碼中已經注釋,這裡不再進行單獨講解。

  布局檔案代碼:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3     android:layout_width="match_parent" 4     android:layout_height="match_parent" 5     android:orientation="vertical" 6     android:paddingBottom="@dimen/activity_vertical_margin" 7     android:paddingLeft="@dimen/activity_horizontal_margin" 8     android:paddingRight="@dimen/activity_horizontal_margin" 9     android:paddingTop="@dimen/activity_vertical_margin"10     tools:context=".MainActivity" >11     <TextView12         android:layout_width="wrap_content"13         android:layout_height="wrap_content"14         android:text="@string/autoText" />15     <!-- 聲明一個AutoCompleteTextView控制項,設定其下拉框標題為“Famous Citi” 並且輸入一個字元開始提示-->16     <AutoCompleteTextView17         android:id="@+id/autotext"18         android:completionHint="Famous Citi"19         android:completionThreshold="1"20         android:layout_width="match_parent"21         android:layout_height="wrap_content" />2223     <TextView24         android:layout_width="wrap_content"25         android:layout_height="wrap_content"26         android:text="@string/multiautoText"27     />28     <MultiAutoCompleteTextView29         android:id="@+id/multiautotext"30         android:layout_width="match_parent"31         android:layout_height="wrap_content"/>32 </LinearLayout> 

  實現Java代碼:

 1 package com.bgxt.autocomplettextviewdemo; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.view.Menu; 6 import android.widget.ArrayAdapter; 7 import android.widget.AutoCompleteTextView; 8 import android.widget.MultiAutoCompleteTextView; 910 public class MainActivity extends Activity {11     private AutoCompleteTextView autotext;12     private MultiAutoCompleteTextView multiautotext;13     @Override14     protected void onCreate(Bundle savedInstanceState) {15         super.onCreate(savedInstanceState);16         setContentView(R.layout.activity_main);17        18         //擷取布局檔案中的兩個控制項對象19         autotext=(AutoCompleteTextView)findViewById(R.id.autotext);20         multiautotext=(MultiAutoCompleteTextView)findViewById(R.id.multiautotext);       21        22         //設定資料來源23         String[] autoStrings=new String[]{"New York","Tokyo","beijing","london","Seoul Special","Los Angeles"};24         //設定ArrayAdapter,並且設定以單行下拉式清單風格展示(第二個參數設定)。25         ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this,26 android.R.layout.simple_dropdown_item_1line, autoStrings);27         //設定AutoCompleteTextView的Adapter28         autotext.setAdapter(adapter);29        30         //設定MultiAutoCompleteTextView的Adapter31         multiautotext.setAdapter(adapter);32         //設定選項間隔使用逗號分隔。33         multiautotext.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());34     }35 }

  實現效果:

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.