7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Android SDK

Tạo một bàn phím trong Android

Read Time: 11 mins

Vietnamese (Tiếng Việt) translation by Caitlyn Cat Tien (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Hầu hết các thiết bị Android không có bàn phím vật lý. Thay vào đó, chúng dựa vào bàn phím ảo hoặc bàn phím mềm để nhận thông tin từ người dùng. Nếu bạn đang định cá nhân hoá Android, biết cách xây dựng một bàn phím mềm tự biên có thể mang sở thích của bạn lên một tầm cao mới.

Sừ dụng Android SDK, bạn có thể nhanh chóng tạo ra một bàn phím mềm một cách đáng kinh ngạc với vài dòng code, bởi vì SDK đã đảm nhận rất nhiều những công việc chi tiết, như nhận ra các phím đang được chạm, vẽ ra bàn phím, và thiết lập kết nối giữa bàn phím và vùng nhập thông tin.

Trong bài viết này, bạn sẽ học cách tạo ra một bàn phím giả lập có đầy đủ chức năng, có thể sử dụng như một bàn phím mặc định cho thiết bị Android của bạn.

1. Các điều kiện phải có

Bạn sẽ cần cài đặt Eclipse ADT Bundle. Bạn có thể tải chúng từ trang web Android Developer.

2. Tạo một dự án mới

Mở Eclipse lên và tạo một ứng dụng Android mới. Gọi tên là SimpleKeyboard. Chắc rằng bạn chọn một tên package duy nhất. Xét SDK cần thiết tối thiểu là Android 2.2 và xét SDK mục tiêu là Android 4.4.

Ứng dụng này sẽ không có activities nào vì thế bỏ chọn Create Activity và nhấn Finish.

3. Chỉnh sửa Manifest

Một bàn phím giả lập được xem như là một Input Method Editor (IME) của hệ điều hành Android. Một IME được khai báo như một Service trong AndroidManifest.xml, nó dùng quyền BIND_INPUT_METHOD, và hồi đáp đến hành động android.view.InputMethod.

Bổ sung các dòng sau đây vào thẻ application của manifest:

4. Tạo file method.xml

Thẻ service trong file manifest chưa một thẻ meta-data, thẻ này thám chiếu đến một file XML tên là method.xml. Không có file này, hệ điều hành Android sẽ không nhận biết Service là một IME service hợp lệ. File này gồm có thông tin về phương thức nhập liệu và các subtypes (phân nhóm) của nó. Với bàn phím của chúng ta, định nghĩa một subtype đơn lẻ cho địa phương en_US. Tạo một thư mục res/xml nếu chưa có, và thêm file method.xml vào đó. Nội dung của file sẽ giống như sau:

5. Chỉnh sửa strings.xml

Những string (nội dung) mà ứng dụng này sử dụng được định nghĩa trong file res/values/strings.xml. Chúng ta sẽ cần 3 nội dung:

  • tên của ứng dụng
  • nhãn tên của IME
  • nhãn tên các subtype của IME

Cập nhật file strings.xml của bạn để nó có nội dung như sau:

6. Xác định bố cục của bàn phím

Bố cục của bàn phím chỉ có một KeyboardView. Thuộc tính layout_alignParentBottom được xét là true vì thế bàn phím xuất hiện ở bên dưới của màn hình.

Tạo một file tên là res/layout/keyboard.xml và thay nội dung của nó với phần dưới đây:

keyPreviewLayout là bố cục của phần pop-up ngắn hạn hiện ra mỗi khi một phím trên bàn phím được bấm vào. Nó chứa một TextView đơn lẻ. Tạo một file tên là res/layout/preview.xml và thêm phần sau đây vào:

6. Định nghĩa các phím

Thông tin chi tiết của các phím và vị trí của chúng được xác định trong một file XML. Mỗi phím có những thuộc tính sau:

  • KeyLabel: thuộc tính này gồm các chữ được hiển thị trên các phím.
  • codes: thuộc tính này gồm các giá trị unicode của các ký tự mà các phím đại diên cho chúng.

Ví dụ, để định nghĩa một phím cho một ký tự A, thuộc tính codes nên là giá trị 97 và thuộc tính keyLabel nên thiết lập là A.

Nếu nhiều code tương tác với cùng một phím, thì ký tự mà phím đó đại diên cho sẽ phụ thuộc vào số lần gõ của phím đó nhận được. Ví dụ, một phím có code 63, 3358.

  • Một lần gõ vào phím sẽ có ra kết quả là ký tự nào?
  • Hai lần gõ nhanh sẽ cho ra ký tự nào !
  • Ba lần gõ nhanh cho ra kết quả là ký tự:

Một phím có thể có vài thuộc tính không bắt buộc:

  • keyEdgeFlags: thuộc tính này có thể lấy giá trị Trái hoặc Phải.  Thuộc tính này thường được bổ sung cho các phím có cả bên trái và bên phải của một hàng.
  • keyWidth: thuộc tính này định nghĩa chiều dài của một phím. Nó thường được định nghĩa như là giá trị phần trăm. Nó thường được xác định như giá trị phần trăm
  • IsRepeatable: Nếu thuộc tính này được xét là true, thì phím được chạm-giữ lâu sẽ lặp lại hành động của phím nhiều lần. Nó thường xét là true cho phím xoá (delete) và khoảng trắng (spacebar). Nó thường được cài đặt là True cho phím delete và khoảng trắng.

Các phím trên bàn phím được nhóm lại thành những hàng ngang. Một thực tiễn tốt để giới hạn số lượng phím trên một hàng đến mức tối đa là 10, với mỗi phím có một chiều rộng bằng với 10% của bàn phím. Chiều cao của các phím được xét đến 60dp trong bài hướng dẫn này. Giá trị này có thể được điều chỉnh, nhưng giá trị nhỏ hơn 48dp không được khuyến khích. Bàn phím của chúng ta có năm hàng phím.

Chúng ta có thề tiếp tục và thiết kế bàn phím. Tạo một file mới tên là res/xml/qwerty.xml và thay thế nội dung của nó với phần sau đây:

Có lẽ bạn chú ý rằng vài phím có các giá trị âm cho thuộc tính codes. Các giá trị âm tương đương với những hằng số đã được định nghĩa trước trong class Keyboard. Ví dụ, giá trị -5 bằng với giá trị của Keyboard.KEYCODE_DELETE.

7. Tạo Class Service

Tạo một class Java mới và gọi nó là SimpleIME.java Class này nên extend class InputMethodService và implement interface OnKeyboardActionListener. Interface OnKeyboardActionListener chứa các phương thức được gọi khi các phím của bàn phìm mềm được chạm hoặc giữ nhấn.

Class SimpleIME nên có 3 giá trị biến số:

  • Một biến KeyboardView tham chiếu đến view được định nghĩa trong bố cục layout.
  • Một giá trị biến Keyboard được gán vào KeyboardView
  • Một biến boolean để báo chúng ta biết nếu phím Cap Lock có được kích hoạt hay không.

Sau khi khai báo những biến này và thêm vào các phương thức của interface OnKeyboardActionListener, class SimpleIME sẽ trông như thế này:

Khi bàn phím được tạo ra, phương thức onCreateInputView được gọi. Tất cả các biến số của Service có thể được khởi trị ở đây. Cập nhật phần triển khai của phương thức onCreateInputView như bên dưới đây:

Tiếp đến, chúng ta tạo ra một phương thức để tạo âm thanh khi một phím được gõ. Chúng ta sẽ dụng class AudioManager để chạy các âm thanh. Android SDK gồm một vài hiệu ứng âm thanh mặc định cho phím bấm và những âm thanh đó được dùng trong phương thức playClick.

Sau cùng, cập nhật phương thức onKey để bàn phím của chúng ta có thể giao tiếp với các vùng nhập thông tin (thường là views của EditText) của những ứng dụng khác.

Phương thức getCurrentInputConnection được dùng để gọi một kết nối đến một vùng nhập liệu của một ứng dụng khác. Một khi chúng ta có kết nối, chúng ta có thể sử dụng các phương thức sau:

  • commitText để bổ sung thêm thông tin hoặc nhiều ký tự hơn cho vùng nhập liệu
  • deleteSurroundingText để xoá một hoặc nhiều ký tự của vùng nhập liệu
  • sendKeyEvent để gửi các sự kiện, giống như KEYCODE_ENTER, đến các ứng dụng bên ngoài.

Bất cứ khi nào một người dùng nhấn một phím trên bàn phím giả lập, thì phương thức onKey được gọi cùng với giá trị của phím trở thành một trong những tham số của nó. Dựa trên giá trị này, bàn phím thực hiện một trong số các hoạt động sau:

  • Nếu code là KEYCODE_DELETE, thì một ký tự về bên trái của con trỏ sẽ bị xoá đi bằng phương thức deleteSurroundingText.
  • Nếu code là KEYCODE_DONE, một sự kiện KEYCODE_ENTER sẽ được thực thi.
  • Nếu code là KEYCODE_SHIFT, giá trị của biến số được thay đổi và trạng thái di chuyển của bàn phím sẽ được cập nhật bằng phương thức setShifted.  Bàn phím cần được vẽ lại khi trạng thái thay đổi vì thế các nhãn tên của phím được cập nhật lại.  Phương thức invalidateAllKeys được sử dụng để vẽ lại tất cả các phím.
  • Với những code khác, code chỉ đơn thuần biến đổi sang một ký tự và gửi đến vùng nhập liệu. Nếu code đại liện cho một ký tự của bảng chữ cái và biến caps được xét là true, thì ký tự được chuyển sang chữ in hoa. Nếu code đại diện cho một chữ của ký tự chữ cái và biến số thay đổi được xét là true, sau đó ký tự đó sẽ được chuyển đổi thành chữ hoa.

Cập nhật phương thức onKey để nó trông như thế này:

8. Kiểm tra bàn phím

Bàn phím mềm đã sẵn sàng để được kiểm tra. Biên dich và chạy nó trên một thiết bị Android. Ứng dụng này không có một Activity, có nghĩa là nó không được hiển thị trên launcher. Để sử dụng, đầu tiên phải kích hoạt nó từ phần Settings của thiết bị.

Sau khi kích hoạt Simple IME, mở ứng dụng bất kỳ để nhập thông tin (ví dụ dụ, bất kỳ app trao đổi thông điệp nào) và nhấn chọn một trong những vùng nhập thông tin. Bạn sẽ thấy một icon bàn phím xuất hiện trong khu vực thông báo. Tuỳ vào thiết bị của bạn, bạn có thể nhấn vào icon đó hoặc kéo rê thanh notification (thông báo) xuống và chọn Simple IME thành phương thức nhập. Bây giờ bạn có thể gõ vào bằng bàn phím mới của bạn.

Tổng kết

Trong bài viết này, bạn đã học cách để tạo ra một ứng dụng bàn phím từ đầu. Để thay đổi giao diện của bàn phím của bạn, tất cả bạn phải làm là thêm thêm phong cách để các tập tin res/layout/keyboard.xml và res/layout/preview.xml. Để thay đổi vị trí của các phím, hãy cập nhật file res/xml/qwerty.xml. Để bổ sung thêm nhiều tính năng hơn, hãy tham khảo tài liệu dành cho người phát triển.


Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.