Chỉ định kiểu phương thức nhập

Thử cách Compose
Jetpack Compose là bộ công cụ giao diện người dùng được đề xuất cho Android. Tìm hiểu cách sử dụng thao tác chạm và nhập trong Compose.

Mỗi trường văn bản yêu cầu một loại nội dung nhập văn bản nhất định, chẳng hạn như địa chỉ email, số điện thoại hoặc văn bản thuần tuý. Bạn phải chỉ định loại dữ liệu nhập cho từng trường văn bản trong ứng dụng để hệ thống hiển thị phương thức nhập mềm thích hợp, chẳng hạn như bàn phím ảo.

Ngoài loại nút có sẵn với phương thức nhập, bạn có thể chỉ định các hành vi như liệu phương thức nhập có cung cấp đề xuất chính tả, viết hoa các câu mới hay không và thay thế nút trả lại vị trí đầu dòng có một nút hành động như Xong hoặc Tiếp theo. Trang này cho biết cách để chỉ định các đặc điểm này.

Chỉ định loại bàn phím

Luôn khai báo phương thức nhập cho các trường văn bản của bạn bằng cách thêm phương thức android:inputType cho Phần tử <EditText>.

đầu vào số điện thoại
Hình 1. Kiểu dữ liệu đầu vào phone.

Ví dụ: nếu bạn muốn có phương thức nhập để nhập số điện thoại, hãy sử dụng Giá trị "phone":

<EditText
    android:id="@+id/phone"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/phone_hint"
    android:inputType="phone" />
Loại nhập textPassword
Hình 2. Kiểu dữ liệu đầu vào textPassword.

Nếu trường văn bản là dành cho mật khẩu, hãy sử dụng giá trị "textPassword" để trường văn bản ẩn thông tin đầu vào của người dùng:

<EditText
    android:id="@+id/password"
    android:hint="@string/password_hint"
    android:inputType="textPassword"
    ... />

Thuộc tính android:inputType có thể có một số giá trị được ghi nhận, và bạn có thể kết hợp một số giá trị để chỉ định giao diện phương thức nhập cũng như của Google.

Bật tính năng đề xuất chính tả và các hành vi khác

tự động sửa lỗi
Hình 3. Việc thêm textAutoCorrect sẽ cung cấp tính năng tự động sửa lỗi cho lỗi chính tả.

Thuộc tính android:inputType cho phép bạn chỉ định các hành vi khác nhau cho dữ liệu đầu vào . Quan trọng nhất, nếu trường văn bản của bạn là dành cho mục đích nhập văn bản cơ bản—chẳng hạn như tin nhắn văn bản—bật tính năng tự động sửa lỗi chính tả bằng "textAutoCorrect" giá trị.

Bạn có thể kết hợp các hành vi và kiểu phương thức nhập khác nhau với Thuộc tính android:inputType. Ví dụ: dưới đây là cách tạo một trường văn bản viết hoa từ đầu tiên của câu và cũng tự động sửa lỗi chính tả:

<EditText
    android:id="@+id/message"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType=
        "textCapSentences|textAutoCorrect"
    ... />

Chỉ định thao tác của phương thức nhập

Hầu hết các phương thức nhập mềm đều cung cấp nút hành động của người dùng ở góc dưới cùng thích hợp cho trường văn bản hiện tại. Theo mặc định, hệ thống sử dụng nút này cho nút Tiếp theo hoặc Hành động Xong trừ phi trường văn bản của bạn hỗ trợ văn bản nhiều dòng, chẳng hạn như với android:inputType="textMultiLine" – trong trường hợp này, nút hành động là một toa lợi nhuận. Tuy nhiên, bạn có thể chỉ định các thao tác khác phù hợp hơn với trường văn bản, chẳng hạn như Gửi hoặc Bắt đầu.

Để chỉ định nút hành động trên bàn phím, hãy sử dụng android:imeOptions với một giá trị hành động như "actionSend" hoặc "actionSearch". Ví dụ:

nút gửi
Hình 4. Nút Send (Gửi) xuất hiện khi bạn khai báo android:imeOptions="actionSend".
<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" />

Sau đó, bạn có thể lắng nghe lần nhấn nút hành động bằng cách xác định TextView.OnEditorActionListener cho phần tử EditText. Trong trình nghe, hãy phản hồi mã thao tác IME thích hợp được xác định trong EditorInfo lớp, chẳng hạn như IME_ACTION_SEND, như trong ví dụ sau:

Kotlin

findViewById<EditText>(R.id.search).setOnEditorActionListener { v, actionId, event ->
    return@setOnEditorActionListener when (actionId) {
        EditorInfo.IME_ACTION_SEND -> {
            sendMessage()
            true
        }
        else -> false
    }
}

Java

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;
    }
});

Cung cấp đề xuất tự động hoàn thành

Nếu muốn cung cấp đề xuất cho người dùng khi họ nhập, bạn có thể sử dụng lớp con của Đã gọi EditText AutoCompleteTextView Để triển khai tính năng tự động hoàn tất, bạn phải chỉ định Adapter cung cấp văn bản nội dung đề xuất. Có một số bộ chuyển đổi có sẵn, tuỳ thuộc vào nguồn của dữ liệu, chẳng hạn như từ cơ sở dữ liệu hoặc một mảng.

gợi ý văn bản
Hình 5. Ví dụ về AutoCompleteTextView có văn bản đề xuất.

Quy trình sau đây mô tả cách thiết lập một AutoCompleteTextView cung cấp đề xuất từ một mảng bằng cách sử dụng ArrayAdapter:

  1. Thêm AutoCompleteTextView vào bố cục. Đây là một bố cục chỉ có văn bản trường:
    <?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. Xác định mảng chứa tất cả các đề xuất văn bản. Ví dụ: dưới đây là một mảng tên quốc gia:
    <?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. Trong Activity hoặc Fragment, hãy sử dụng mã sau để chỉ định bộ chuyển đổi cung cấp các đề xuất:

    Kotlin

    // Get a reference to the AutoCompleteTextView in the layout.
    val textView = findViewById(R.id.autocomplete_country) as AutoCompleteTextView
    // Get the string array.
    val countries: Array<out String> = resources.getStringArray(R.array.countries_array)
    // Create the adapter and set it to the AutoCompleteTextView.
    ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, countries).also { adapter ->
        textView.setAdapter(adapter)
    }
    

    Java

    // 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);
    

    Trong ví dụ trước, một ArrayAdapter mới được khởi tạo để liên kết từng mục trong Mảng chuỗi countries_array thành một TextView tồn tại trong Bố cục simple_list_item_1. Đây là bố cục do Android cung cấp nhằm mang lại giao diện chuẩn cho văn bản trong danh sách.

  4. Chỉ định bộ chuyển đổi cho AutoCompleteTextView bằng cách gọi setAdapter()