文本域
文本域允許用戶在您的應用中鍵入文本。它可以是單行或多行。觸摸文本字段會放置光標並自動顯示鍵盤。除了鍵入之外,文本字段還允許進行各種其他活動,例如文本選擇(剪切,複製,粘貼)和通過自動完成查找數據。
您可以使用EditText對象向佈局添加文本字段。您通常應該在XML佈局中使用<EditText>元素執行此操作。
指定鍵盤類型
文本字段可以具有不同的輸入類型,例如數字,日期,密碼或電子郵件地址。該類型確定字段內允許的字符類型,並可以提示虛擬鍵盤優化其常用字符的佈局。
您可以使用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" />
有幾種不同的輸入類型可用於不同的情況。以下是android的一些更常見的值:inputType:
"text"
普通文字鍵盤。
"textEmailAddress"
帶@字符的普通文本鍵盤。
"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文檔一起列出。
指定鍵盤操作
除了更改鍵盤的輸入類型之外,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" />
添加其他鍵盤標誌
除了可以使用android:imeOptions屬性指定的操作外,還可以添加其他標誌以指定其他鍵盤行爲。列出所有可用的標誌以及android:imeOptions文檔中的操作。
例如,圖5示出了當手機設備處於橫向方向時系統如何啓用全屏文本字段(或者屏幕空間另外受空間限制)。您可以在android:imeOptions屬性中使用flagNoExtractUi禁用全屏輸入模式,如圖6所示。
提供自動完成建議
如果要在用戶鍵入時向其提供建議,可以使用名爲AutoCompleteTextView的EditText子類。要實現自動完成,您必須指定提供文本建議的適配器。有幾種適配器可用,具體取決於數據的來源,例如數據庫或數組。
以下過程介紹如何使用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。