Android官方文檔—User Interface(Input Controls)(Text Fields)

文本域

文本域允許用戶在您的應用中鍵入文本。它可以是單行或多行。觸摸文本字段會放置光標並自動顯示鍵盤。除了鍵入之外,文本字段還允許進行各種其他活動,例如文本選擇(剪切,複製,粘貼)和通過自動完成查找數據。

您可以使用EditText對象向佈局添加文本字段。您通常應該在XML佈局中使用<EditText>元素執行此操作。

指定鍵盤類型


圖1.默認文本輸入類型。

文本字段可以具有不同的輸入類型,例如數字,日期,密碼或電子郵件地址。該類型確定字段內允許的字符類型,並可以提示虛擬鍵盤優化其常用字符的佈局。

您可以使用android:inputType屬性爲EditText對象指定所需的鍵盤類型。例如,如果您希望用戶輸入電子郵件地址,則應使用textEmailAddress輸入類型:

<EditText
    android:id="@+id/email_address"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/email_hint"
    android:inputType="textEmailAddress" />
圖2. textEmailAddress輸入類型。

有幾種不同的輸入類型可用於不同的情況。以下是android的一些更常見的值:inputType:

"text"

普通文字鍵盤。

"textEmailAddress"

帶@字符的普通文本鍵盤。

圖3.手機輸入類型。

"textUri"

帶/字符的普通文本鍵盤。

"number"

基本數字鍵盤。

"phone"

電話式鍵盤。

控制其他行爲

android:inputType還允許您指定某些鍵盤行爲,例如是否將所有新單詞大寫或使用自動完成和拼寫建議等功能。

android:inputType屬性允許按位組合,因此您可以同時指定鍵盤佈局和一個或多個行爲。

以下是一些定義鍵盤行爲的常見輸入類型值:

"textCapSentences"

普通文本鍵盤,用於爲每個新句子的首字母大寫。

"textCapWords"

普通文本鍵盤,用於大寫每個單詞。標題或人名很好。

"textAutoCorrect"

普通文本鍵盤,可以糾正拼寫錯誤的單詞。

"textPassword"

普通文本鍵盤,但輸入的字符變成點。

"textMultiLine"

普通文本鍵盤,允許用戶輸入包含換行符(回車符)的長字符串。

例如,以下是如何收集郵政地址,大寫每個單詞以及禁用文本建議的方法:

<EditText
    android:id="@+id/postal_address"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/postal_address_hint"
    android:inputType="textPostalAddress|
                       textCapWords|
                       textNoSuggestions" />

所有行爲也都與android:inputType文檔一起列出。

指定鍵盤操作


圖4.如果聲明android:imeOptions =“actionSend”,
則鍵盤包含Send動作。

除了更改鍵盤的輸入類型之外,Android還允許您指定用戶完成輸入時要執行的操作。該操作指定出現的按鈕代替回車鍵和要執行的操作,例如“搜索”或“發送”。

您可以通過設置android:imeOptions屬性來指定操作。例如,以下是指定“發送”操作的方法:

<EditText
    android:id="@+id/search"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/search_hint"
    android:inputType="text"
    android:imeOptions="actionSend" />

如果您沒有明確指定輸入操作,那麼系統會嘗試確定是否有任何後續的android:focusable字段。如果在此後面找到任何可聚焦字段,系統會將“actionNext”操作應用於當前EditText,以便用戶可以選擇“下一步”以移至下一個字段。如果沒有後續的可聚焦字段,系統將應用“actionDone”操作。您可以通過將android:imeOptions屬性設置爲任何其他值(例如“actionSend”或“actionSearch”)來覆蓋此操作,或者通過使用“actionNone”操作來禁止默認行爲。

響應操作按鈕事件

如果已使用android:imeOptions屬性(例如“actionSend”)爲輸入法指定了鍵盤操作,則可以使用TextView.OnEditorActionListener偵聽特定的操作事件。 TextView.OnEditorActionListener接口提供了一個名爲onEditorAction()的回調方法,該方法指示使用操作ID(如IME_ACTION_SEND或IME_ACTION_SEARCH)調用的操作類型。

例如,以下是用戶單擊鍵盤上的“發送”按鈕時的監聽方式:

EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});

設置自定義操作按鈕標籤

如果鍵盤太大而不能與底層應用程序合理地共享空間(例如當手機設備處於橫向時),則觸發全屏(“提取模式”)。在此模式下,輸入旁邊會顯示標記的操作按鈕。您可以通過設置android:imeActionLabel屬性來自定義此按鈕的文本:

<EditText
    android:id="@+id/launch_codes"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/enter_launch_codes"
    android:inputType="number"
    android:imeActionLabel="@string/launch" />
圖5.帶有android:imeActionLabel的自定義動作標籤。

 

添加其他鍵盤標誌


除了可以使用android:imeOptions屬性指定的操作外,還可以添加其他標誌以指定其他鍵盤行爲。列出所有可用的標誌以及android:imeOptions文檔中的操作。

例如,圖5示出了當手機設備處於橫向方向時系統如何啓用全屏文本字段(或者屏幕空間另外受空間限制)。您可以在android:imeOptions屬性中使用flagNoExtractUi禁用全屏輸入模式,如圖6所示。

圖6.使用android:imeOptions =“flagNoExtractUi”禁用全屏文本字段(“提取模式”)。

提供自動完成建議


如果要在用戶鍵入時向其提供建議,可以使用名爲AutoCompleteTextView的EditText子類。要實現自動完成,您必須指定提供文本建議的適配器。有幾種適配器可用,具體取決於數據的來源,例如數據庫或數組。

圖7.帶有文本建議的AutoCompleteTextView示例。

以下過程介紹如何使用ArrayAdapter設置AutoCompleteTextView以提供來自陣列的建議:

1.將AutoCompleteTextView添加到您的佈局。這是一個只包含文本字段的佈局:

<?xml version="1.0" encoding="utf-8"?>
<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/autocomplete_country"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

2.定義包含所有文本建議的數組。例如,這是一個在XML資源文件(res / values / strings.xml)中定義的國家/地區名稱數組:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="countries_array">
        <item>Afghanistan</item>
        <item>Albania</item>
        <item>Algeria</item>
        <item>American Samoa</item>
        <item>Andorra</item>
        <item>Angola</item>
        <item>Anguilla</item>
        <item>Antarctica</item>
        ...
    </string-array>
</resources>

3.在“活動”或“片段”中,使用以下代碼指定提供建議的適配器:

// Get a reference to the AutoCompleteTextView in the layout
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
// Get the string array
String[] countries = getResources().getStringArray(R.array.countries_array);
// Create the adapter and set it to the AutoCompleteTextView
ArrayAdapter<String> adapter =
        new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, countries);
textView.setAdapter(adapter);

這裏,初始化一個新的ArrayAdapter,將COUNTRIES字符串數組中的每個項目綁定到simple_list_item_1佈局中存在的TextView(這是Android提供的佈局,爲列表中的文本提供標準外觀)。

然後通過調用setAdapter()將適配器分配給AutoCompleteTextView。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章