第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

Android 入門教程

菜單類控件
菜單:Menu
并發(fā)編程
多線程
首頁 慕課教程 Android 入門教程 Android 入門教程 自動補(bǔ)全文本框 AutoCompleteText

本節(jié)繼續(xù)學(xué)習(xí)采用 Adapter 實現(xiàn)的控件,如果你希望用戶在輸入文本的過程中能夠得到文本補(bǔ)全建議,那么 AutoCompleteTextView 將是一個非常不錯的選擇。比如在搜索引擎的場景下就很適用,大家應(yīng)該都有體會,在百度搜索框輸入要搜索的關(guān)鍵詞,如果需要等全部輸入完畢敲回車才出結(jié)果,那將是一種很差的體驗;

而實際上百度是在我們輸入的過程中實時的自動預(yù)判我們要輸入的內(nèi)容,然后幫我們補(bǔ)全關(guān)鍵詞,這時候我們可以直接選擇系統(tǒng)的補(bǔ)全方案而減少很多不必要的時間,大大提高了搜索效率,體驗非常棒。

1. AutoCompleteTextView 的特性

AutoCompleteTextView 派生自 EditText,擁有 EditText 的所有屬性和 API(關(guān)于 EditText 的詳細(xì)講解,可參見第 14 節(jié))。它提供一個輸入框,并在 EditText 的基礎(chǔ)之上增加了輸入過程中的實時文本自動補(bǔ)全的功能,我們可以通過 Adapter 實現(xiàn)補(bǔ)全列表和補(bǔ)全數(shù)據(jù)的綁定,就和 ListView 一樣,這個效果對于用戶的輸入體驗提升是非常大的。

2. AutoCompleteTextView 的基本用法

2.1 常用屬性

AutoCompleteTextView 是繼承自 EditText 的,所以 EditText 的屬性它全都可以適用,這里主要講解 AutoCompleteTextView 特有的屬性。

  • android:completionHint:
    設(shè)置下拉菜單中的提示信息
  • android:completionHintView:
    設(shè)置提示菜單的布局樣式
  • android:completionThreshold:
    指定當(dāng)用戶輸入多少字符的時候開始提示
  • android:dropDownAnchor:
    指定自動補(bǔ)全下拉菜單的錨點 View,系統(tǒng)默認(rèn)使用該當(dāng)前 TextView 作為定位錨點 View
  • android:dropDownHeight:
    設(shè)置下拉菜單的高度
  • android:dropDownWidth:
    設(shè)置下拉菜單的寬度
  • android:dropDownHorizontalOffset:
    設(shè)置下拉菜單的水平間距
  • android:dropDownVerticalOffset:
    設(shè)置下拉菜單的豎直間距
  • android:dropDownSelector:
    設(shè)置下拉菜單點擊效果,類似Button
  • android:popupBackground:
    設(shè)置下拉菜單的背景樣式

2.2 AutoCompleteTextView 的 API

AutoCompleteTextView 作為升級版的 EditText,要用到 API 的地方并不多,大多數(shù)場景還需要掌握屬性的設(shè)置就行,這里對 API 做一個簡單的講解。

  • getAdapter()
    返回一個 ListAdapter 類型的 adapter ,即我們代碼中綁定的 adapter 對象。
  • getCompletionHint()
    獲取當(dāng)前匹配的補(bǔ)全信息列表
  • getDropDownAnchor()
    獲取下拉補(bǔ)全列表的錨定 View 的 id
  • getListSelection()
    獲取下拉列表中被選中的選項所在的位置
  • isPopupShowing()
    判斷下拉菜單是否彈出
  • showDropDown()
    彈出下拉菜單

3. AutoCompleteTextView 示例

3.1 編寫布局文件

布局文件很簡單,只需要在根布局的位置添加一個 AutoCompleteTextView 標(biāo)簽,然后加上適當(dāng)?shù)膶傩约纯桑?/p>

<?xml version="1.0" encoding="utf-8"?>
<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/autoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:completionHint="請輸入您要查找的內(nèi)容"
    android:completionThreshold="1"
    android:dropDownHorizontalOffset="10dp" />

通過android:completionHint設(shè)置當(dāng)前 AutoCompleteTextView 的功能提示,android:completionThreshold="1"表示當(dāng)用戶輸入一個字符時就開始做補(bǔ)全提示,最后通過android:dropDownHorizontalOffset設(shè)置一個水平間距。

3.2 編寫 Java 代碼

Java 代碼相對比較簡單,因為補(bǔ)全的結(jié)果是一個字符串?dāng)?shù)組,補(bǔ)全列表的列表項也都是單個項目,所以這里直接使用ArrayAdapter再好不過(關(guān)于 ArrayAdapter 的使用詳見 23 節(jié)),代碼如下:

package com.emercy.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

public class MainActivity extends Activity {

    private AutoCompleteTextView mTextView;
    private String[] mDataName = {"慕課", "慕課網(wǎng)", "慕課Android教程", "慕斯蛋糕", "慕容復(fù)"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = findViewById(R.id.autoCompleteTextView);

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, mDataName);
        mTextView.setAdapter(adapter);
    }
}

首先我們將補(bǔ)全項存入字符串?dāng)?shù)組中,然后獲取 AutoCompleteTextView 對象,創(chuàng)建 ArrayAdapter,最后為 AutoCompleteTextView 對象指定 Adapter 即可。
其中在創(chuàng)建 ArrayAdapter 的時候我們傳入了一個 id 為android.R.layout.simple_dropdown_item_1line的布局文件,它是 Android 系統(tǒng)為我們內(nèi)置的專門用于下拉菜單使用的布局文件,其實里面只有一個 TextView 用于顯示下拉菜單項,查看源碼如下:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    style="?android:attr/dropDownItemStyle"
    android:textAppearance="?android:attr/textAppearanceLargePopupMenu"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:ellipsize="marquee" />

我們在使用下拉菜單類型的樣式時都可考慮直接采用系統(tǒng)樣式,最終編譯出來屏幕中有一個輸入框,我們輸入一個“慕”字,會展示以慕開頭的所有可補(bǔ)全的字符串,結(jié)果如圖所示:

AutoCompleteTextView示例

4. 小結(jié)

本節(jié)學(xué)習(xí)了 EditText 的升級版,同時也是有一個使用 Adapter 的控件。它除了能提供和 EditText 一樣的輸入功能之外,還能通過 Adapter 加載一個字符串?dāng)?shù)組,在用戶輸入的同時為用戶實現(xiàn)實時自動補(bǔ)全,在搜索查找的場景非常適用。
到這里已經(jīng)學(xué)習(xí)了很多和 Adpater 有關(guān)的 UI 組件了,大家有沒有發(fā)現(xiàn) Adapter 的一些規(guī)律?這個問題留給大家在課后思考,也希望大家在學(xué)習(xí)的過程中能夠不斷歸納總結(jié)。