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 những API Dịch vụ văn bản do nền tảng Android cung cấp.

Để sử dụng khung này trong ứng dụng, bạn cần tạo một loại dịch vụ đặc biệt dành cho Android để tạo đối tượng session (phiên) kiểm tra chính tả. Dựa trên văn bản bạn cung cấp, đối tượng session trả về các mụ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 1. Vòng đời của dịch vụ trình kiểm tra chính tả.

Để khởi động tính năng kiểm tra chính tả, ứng dụng của bạn sẽ bắt đầu triển khai dịch vụ kiểm tra chính tả. Các ứng dụng khách (client) trong ứng dụng của bạn (chẳng hạn như các hoạt động hoặc từng thành phần trên giao diện người dùng) yêu cầu một phiên kiểm tra chính tả qua dịch vụ, sau đó sử dụng phiên này để đề xuất cho văn bản. Khi ứng dụng khách chấm dứt hoạt động, phiên kiểm tra chính tả cũng kết thúc. Nếu cần, ứng dụng 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ả

Để sử dụng khung 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ả, bao gồm cả đị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. Bạn cũng phải thêm tệp siêu dữ liệu XML mô tả dịch vụ kiểm tra chính tả cũng như 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 kiểm tra chính tả. Trong lớp con, bạn phải triển khai phương thức sau:
createSession()
Một phương thức nhà máy (factory method) trả về đối tượng SpellCheckerService.Session cho một ứng dụng khách muốn kiểm tra chính tả.

Xem ứng dụng mẫu Spell Checker Service (Dịch vụ kiểm tra chính tả) để tìm hiểu thêm về cách triển khai lớp này.

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, để cho phép ứng dụng khách truyền văn bản đến trình kiểm tra chính tả và nhận nội dung đề xuất. Trong lớp này, bạn phải triển khai các phương thức sau:
onCreate()
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.v.
onGetSentenceSuggestionsMultiple()
Thực sự kiểm tra chính tả. Phương thức này trả về một loạt 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ý yêu cầu huỷ việc kiểm tra chính tả), onGetSuggestions() (xử lý yêu cầu đề xuất từ vựng) và onGetSuggestionsMultiple() (xử lý nhiều yêu cầu đề xuất từ vựng cùng lúc).

Xem ứng dụng mẫu Spell Checker Client (Ứng dụng khách kiểm tra chính tả) để tìm hiểu thêm về cách triển khai lớp này.

Lưu ý: Bạn phải triển khai tất cả khía cạnh của tính năng kiểm tra chính tả dưới dạng không đồng bộ và an toàn cho luồng. Trình kiểm tra chính tả có thể được gọi đồng thời qua nhiều luồng chạy trên nhiều lõi. SpellCheckerServiceSpellCheckerService.Session sẽ tự động xử lý vấn đề này.

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

Ngoài mã, bạn cần cung cấp tệp kê khai phù 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ư thể hiện trong đoạn mã 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>

Lưu ý rằng 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 sẽ 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 của spellchecker.xml, theo mô tả trong phần tiếp theo.

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

<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 các chế độ cài đặt. Nội dung 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, các loại 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 thành phần hiển thị TextView 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ả. Các ảnh chụp màn hình sau đây cho thấy điều này:


Hình 2. Kiểm tra chính tả trong TextView.

Tuy nhiên, bạn cũng 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 bạn 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ề tính năng kiểm tra chính tả.