EditText 大眾知識

易冬發表於2017-03-03

介紹

A text field allows the user to type text into your app. It can be either single line or multi-line. Touching a text field places the cursor and automatically displays the keyboard. In addition to typing, text fields allow for a variety of other activities, such as text selection (cut, copy, paste) and data look-up via auto-completion.
You can add a text field to you layout with the EditText object. You should usually do so in your XML layout with a < EditText > element.

文字區域給使用者輸入文字提供了方便,它可以是單行的也可以是多行的。觸控一個文字區域獲取游標並且自動彈出鍵盤。除了可以輸入文字,文字區域還可以用來執行如文字選中(剪下,複製和貼上)和通過自動補全實現的資料查詢等功能。你可以通過在佈局中新增一個EditText物件來實現文字區域,當然也可以在佈局檔案中新增EditText Tag.

EditText 大眾知識
這裡寫圖片描述

指定鍵盤型別

Text fields can have different input types, such as number, date, password, or email address. The type determines what kind of characters are allowed inside the field, and may prompt the virtual keyboard to optimize its layout for frequently used characters.

You can specify the type of keyboard you want for your EditText object with the android:inputType attribute. For example, if you want the user to input an email address, you should use the textEmailAddress input type:
文字區域有不同的輸入型別,如數字,日期,密碼或者郵箱地址。輸入型別決定了文字區域內允許輸入的字元型別,同時也提示著虛擬鍵盤給使用者展示更加常用的字符集合。我們可以通過使用 android:inputType 屬性來明確我們的輸入框想要的鍵盤型別。例如,如果你想要輸入郵箱地址,你可以使用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 Notice
"none" 不彈出鍵盤
"text" 普通文字鍵盤
EditText 大眾知識
"textEmailAddress" 普通文字鍵盤,"@"
EditText 大眾知識
"textUri" 普通文字鍵盤,"/"
EditText 大眾知識
"number" 數字鍵盤
EditText 大眾知識
"phone" Phone-Style鍵盤
EditText 大眾知識

控制其他行為

android:inputType屬性不僅可以用來控制顯示特定的鍵盤型別,而且還可以用來明確一些鍵盤的行為,例如是否大寫,自動補全或者是拼寫建議等。android:inputType使用按位與的方式,所以可以指定多種行為

android:inputType Notice
"textCapSentences" 正常的文字鍵盤但是每一句話第一個字母大寫
EditText 大眾知識
"textCapWords" 正常文字鍵盤但是每一個單詞的第一個字母大寫
"textAutoCorrect" 自動提示拼寫錯誤
EditText 大眾知識
"textPassword" 輸入的文字都變成點點
EditText 大眾知識
"textMultiLine" 允許輸入多行文字,可以換行





關於android:inputType屬性有很多,上面都只是一些栗子,感覺應該很全了,大家可以自行研究。

EditText 大眾知識


指定鍵盤行為

除了改變鍵盤的輸入型別,Android允許當使用者完成輸入指定一個動作,出現的操作指定按鈕的Enter鍵和動作,如“搜尋”或“傳送”鍵。
例如:

<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="actionSearch" />複製程式碼

鍵盤會顯示出“搜尋”按鈕,橫屏之後不僅鍵盤會出現搜尋按鈕,右側還會出現對應的字串

EditText 大眾知識

EditText 大眾知識

主要是對 android:imeOptions 屬性的使用
這麼多的行為可供選擇,上面只是舉一個栗子

EditText 大眾知識
這裡寫圖片描述


對鍵盤中定義的行為的響應

通過android:imeOptions 定義的行為,我們可以對它定義的行為作出響應.我們可以使用TextView.OnEditorActionListener來進行事件的監聽和處理。通過如 IME_ACTION_SEND 或者IME_ACTION_SEARCH等事件ID來針對不同的事件行為做出不同的處理。
例如

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="啟動" />複製程式碼

EditText 大眾知識


自動補全建議

使用AutoCompleteTextView

佈局定義

    <AutoCompleteTextView
        android:completionThreshold="1"//預設是2,這就是為什麼預設輸入兩個字元才能顯示出提示資訊的原因
        android:id="@+id/autocomplete_country"
        android:layout_width="match_parent"
        android:text="@android:string/dialog_alert_title"
        android:layout_height="wrap_content" />複製程式碼

程式碼實現

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 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);//設定提示內容
    }複製程式碼

提示陣列

    <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>複製程式碼

EditText 大眾知識


備註

內容主要來自於Android官網教程:
developer.android.com/guide/topic…

相關文章