Khung kiểm tra chính tả

Nền tảng Android cung cấp một khung kiểm tra chính tả cho phép bạn triển khai và truy cập vào tính năng kiểm tra chính tả trong ứng dụng. Khung này là một trong các API Dịch vụ văn bản.

Để dùng khung này trong ứng dụng, bạn cần tạo một dịch vụ Android tạo đối tượng phiên của trình kiểm tra chính tả. Dựa trên văn bản bạn cung cấp, đối tượng phiên sẽ trả về các đề xuất chính tả do trình kiểm tra chính tả tạo ra.

Vòng đời của trình kiểm tra chính tả

Sơ đồ dưới đây cho thấy vòng đời của dịch vụ kiểm tra chính tả:

Hình ảnh cho thấy vòng đời của dịch vụ kiểm tra chính tả
Hình 1. Vòng đời của dịch vụ trình kiểm tra chính tả.

Để bắt đầu kiểm tra chính tả, ứng dụng sẽ bắt đầu triển khai dịch vụ kiểm tra chính tả. Các ứng dụng khách trong ứng dụng của bạn (chẳng hạn như các hoạt động hoặc phần tử riêng lẻ trên giao diện người dùng) sẽ yêu cầu một phiên kiểm tra chính tả qua dịch vụ, sau đó sử dụng phiên đó để nhận các đề xuất cho văn bản. Khi ứng dụng chấm dứt hoạt động, phiên kiểm tra chính tả sẽ đóng. Nếu cần, ứng dụng của bạn có thể tắt dịch vụ kiểm tra chính tả bất cứ lúc nào.

Triển khai dịch vụ kiểm tra chính tả

Để dùng khung trình kiểm tra chính tả trong ứng dụng, hãy thêm thành phần dịch vụ kiểm tra chính tả có bao gồm định nghĩa đối tượng phiên. Bạn cũng có thể thêm một hoạt động không bắt buộc vào ứng dụng để kiểm soát chế độ cài đặt. Thêm tệp siêu dữ liệu XML mô tả dịch vụ kiểm tra chính tả và thêm các phần tử thích hợp vào tệp kê khai.

Lớp kiểm tra chính tả

Xác định đối tượng session (phiên) và service (dịch vụ) với các lớp sau:

  • Một lớp con của SpellCheckerService
    SpellCheckerService triển khai cả lớp Service và giao diện khung của trình kiểm tra chính tả. Trong lớp con của bạn, hãy triển khai phương thức sau:
    createSession()
    Phương thức ban đầu sẽ trả về đối tượng SpellCheckerService.Session cho một ứng dụng muốn kiểm tra chính tả.
  • Hoạt động triển khai SpellCheckerService.Session
    Một đối tượng mà dịch vụ kiểm tra chính tả cung cấp cho ứng dụng khách để truyền văn bản đến trình kiểm tra chính tả và nhận đề xuất. Trong lớp này, hãy triển khai các phương thức sau:
    onCreate()
    Do hệ thống gọi để phản hồi createSession(). Trong phương thức này, bạn có thể khởi chạy đối tượng SpellCheckerService.Session dựa trên ngôn ngữ hiện tại và các thông tin chi tiết khác.
    onGetSentenceSuggestionsMultiple()
    Thực hiện kiểm tra lỗi chính tả thực tế. Phương thức này trả về một mảng SentenceSuggestionsInfo chứa nội dung đề xuất cho các câu được truyền tới.

    Nếu muốn, bạn có thể triển khai onCancel() để xử lý các yêu cầu huỷ tính năng kiểm tra chính tả; onGetSuggestions() (xử lý yêu cầu đề xuất từ; hoặc onGetSuggestionsMultiple()) xử lý hàng loạt yêu cầu đề xuất từ.

Tệp kê khai và siêu dữ liệu của trình kiểm tra chính tả

Ngoài mã, hãy cung cấp tệp kê khai thích hợp và tệp siêu dữ liệu cho trình kiểm tra chính tả.

Tệp kê khai xác định ứng dụng, dịch vụ và hoạt động để kiểm soát các chế độ cài đặt, như trong ví dụ sau:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.samplespellcheckerservice" >
    <application
        android:label="@string/app_name" >
        <service
            android:label="@string/app_name"
            android:name=".SampleSpellCheckerService"
            android:permission="android.permission.BIND_TEXT_SERVICE" >
            <intent-filter >
                <action android:name="android.service.textservice.SpellCheckerService" />
            </intent-filter>

            <meta-data
                android:name="android.view.textservice.scs"
                android:resource="@xml/spellchecker" />
        </service>

        <activity
            android:label="@string/sample_settings"
            android:name="SpellCheckerSettingsActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Các thành phần muốn sử dụng dịch vụ phải yêu cầu quyền BIND_TEXT_SERVICE để đảm bảo rằng chỉ hệ thống mới liên kết với dịch vụ. Định nghĩa của dịch vụ này cũng chỉ định tệp siêu dữ liệu spellchecker.xml, được mô tả trong phần tiếp theo.

Tệp siêu dữ liệu spellchecker.xml chứa XML sau:

<spell-checker xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/spellchecker_name"
        android:settingsActivity="com.example.SpellCheckerSettingsActivity">
    <subtype
            android:label="@string/subtype_generic"
            android:subtypeLocale="en”
    />
    <subtype
            android:label="@string/subtype_generic"
            android:subtypeLocale="fr”
    />
</spell-checker>

Siêu dữ liệu chỉ định hoạt động mà trình kiểm tra chính tả sử dụng để kiểm soát chế độ cài đặt. Hướng dẫn này cũng xác định các loại phụ cho trình kiểm tra chính tả. Trong trường hợp này, kiểu phụ xác định ngôn ngữ mà trình kiểm tra chính tả có thể xử lý.

Truy cập dịch vụ kiểm tra chính tả qua ứng dụng khách

các ứng dụng dùng khung hiển thị TextViewEditText sẽ tự động hưởng lợi từ tính năng kiểm tra chính tả, vì TextView tự động sử dụng trình kiểm tra chính tả:

Hình ảnh cho thấy cách tự động bật trình kiểm tra chính tả trong EditText
Hình 2. Kiểm tra lỗi chính tả trong EditText.

Tuy nhiên, bạn nên tương tác trực tiếp với dịch vụ kiểm tra chính tả trong các trường hợp khác. Sơ đồ dưới đây cho thấy quy trình kiểm soát khi tương tác với dịch vụ kiểm tra chính tả:

Hình ảnh cho thấy sơ đồ tương tác với dịch vụ kiểm tra chính tả
Hình 3. Tương tác với dịch vụ kiểm tra chính tả.

Trình chỉnh sửa phương thức nhập LatinIME trong Dự án nguồn mở Android có một ví dụ về việc kiểm tra lỗi chính tả.