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

全部開(kāi)發(fā)者教程

Android 入門(mén)教程

菜單類(lèi)控件
菜單:Menu
并發(fā)編程
多線程
首頁(yè) 慕課教程 Android 入門(mén)教程 Android 入門(mén)教程 自動(dòng)補(bǔ)全文本框 AutoCompleteText

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

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

1. AutoCompleteTextView 的特性

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

2. AutoCompleteTextView 的基本用法

2.1 常用屬性

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

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

2.2 AutoCompleteTextView 的 API

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

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

3. AutoCompleteTextView 示例

3.1 編寫(xiě)布局文件

布局文件很簡(jiǎn)單,只需要在根布局的位置添加一個(gè) 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="請(qǐng)輸入您要查找的內(nèi)容"
    android:completionThreshold="1"
    android:dropDownHorizontalOffset="10dp" />

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

3.2 編寫(xiě) Java 代碼

Java 代碼相對(duì)比較簡(jiǎn)單,因?yàn)檠a(bǔ)全的結(jié)果是一個(gè)字符串?dāng)?shù)組,補(bǔ)全列表的列表項(xiàng)也都是單個(gè)項(xiàng)目,所以這里直接使用ArrayAdapter再好不過(guò)(關(guān)于 ArrayAdapter 的使用詳見(jiàn) 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ǔ)全項(xiàng)存入字符串?dāng)?shù)組中,然后獲取 AutoCompleteTextView 對(duì)象,創(chuàng)建 ArrayAdapter,最后為 AutoCompleteTextView 對(duì)象指定 Adapter 即可。
其中在創(chuàng)建 ArrayAdapter 的時(shí)候我們傳入了一個(gè) id 為android.R.layout.simple_dropdown_item_1line的布局文件,它是 Android 系統(tǒng)為我們內(nèi)置的專(zhuān)門(mén)用于下拉菜單使用的布局文件,其實(shí)里面只有一個(gè) TextView 用于顯示下拉菜單項(xiàng),查看源碼如下:

<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" />

我們?cè)谑褂孟吕藛晤?lèi)型的樣式時(shí)都可考慮直接采用系統(tǒng)樣式,最終編譯出來(lái)屏幕中有一個(gè)輸入框,我們輸入一個(gè)“慕”字,會(huì)展示以慕開(kāi)頭的所有可補(bǔ)全的字符串,結(jié)果如圖所示:

AutoCompleteTextView示例

4. 小結(jié)

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