2011-08-03 9 views
9

Câu hỏi ngắn: Có thể (và cách) hiển thị bàn phím mềm từ một Dịch vụ không?Làm thế nào để hiển thị Bàn Phím Mềm từ một Dịch Vụ?

Câu hỏi dài: Tôi đã viết một dịch vụ tạo "thanh trên cùng", được hiển thị trên đầu tất cả các hoạt động, chứa EditText. Tôi muốn hiển thị bàn phím mềm khi EditText được nhấp, nhưng điều này không xảy ra.

Tất nhiên tôi đã thử điều này từ onFocusChange sử dụng Dịch Vụ() và onClick():

InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE); 
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

Cách giải quyết tôi đã đưa ra là để yêu cầu các hoạt động hiện tại để hiển thị bàn phím, bằng cách mở rộng Hoạt động và thêm giao diện AIDL. Hạn chế là mỗi sự kiện quan trọng phải được gửi trở lại Dịch vụ (thông qua một inteface AIDL khác) và được chuyển đổi thành Unicode theo cách thủ công.

Hơn nữa, nếu hoạt động hiện tại chứa EditText, bàn phím mềm chỉ hoạt động cho hoạt động và không hiển thị nữa khi EditText của dịch vụ được chọn.

Điều gì ngăn bàn phím mềm của dịch vụ được hiển thị nếu hoạt động hiện tại có EditText? Nó có thể là một hạn chế Android?

+0

bạn đã giải quyết này? Tôi đang đối mặt với cùng một vấn đề –

Trả lời

0

Nếu bạn muốn hiển thị Bàn phím mềm trên cảm ứng của edittext, Tại sao bạn không cân nhắc sử dụng onTouchListener với văn bản đó. Tôi tin rằng edittext.requestfocus() cũng sẽ làm điều này. Nếu không, người nghe chắc chắn sẽ làm việc.

Hơn nữa đối với loại chế độ xem bạn đề cập, tốt nhất nên sử dụng các đoạn thay vì dịch vụ để tạo chế độ xem.

1

Tôi đang gặp phải sự cố tương tự. Nhưng trong trường hợp của tôi, vấn đề là do sử dụng WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE cờ trong khi tạo WindowManager.LayoutParams để xem.

Và đối với bàn phím tầm nhìn

InputMethodManager inputManager = (InputMethodManager) context. 
       getSystemService(Context.INPUT_METHOD_SERVICE); 
     if (inputManager != null) { 
      inputManager.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT); 
     }