2011-01-02 41 views
15

Tôi đang tạo một trò chơi đánh máy đơn giản trong Android. Tôi không gặp vấn đề gì khi nhập liệu từ bàn phím vật lý, nhưng bây giờ tôi đang cố gắng để có được bàn phím mềm xuất hiện mà không có EditText. Cho đến nay, tôi đã thử như sau:Tôi có thể sử dụng bàn phím mềm mà không có EditText không?

1. EditText với tầm nhìn = "vô hình" và dòng này:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(keyboard_edittext, InputMethodManager.SHOW_FORCED); // SHOW_IMPLICIT also failed 

2. Dòng này trong onCreate():

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 

Phương pháp này thực sự hiển thị một ô trống màu trắng trên dưới 10% của màn hình nhưng không phải bàn phím, mặc dù khi tôi chạy nó bây giờ nó không có gì.

3. Một hai dòng trong onCreate():

InputMethodManager m = (InputMethodManager)this.getSystemService (Context.INPUT_METHOD_SERVICE); m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT); 

Không may mắn trên bất kỳ trong số này. Có thể hiển thị bàn phím mềm (và sau đó sử dụng onKeyUp/onKeyDown) mà không tập trung vào EditText không?

Ngay bây giờ, cách duy nhất tôi có thể thấy là tiếp cận điều này là tạo ra việc triển khai bàn phím mềm của riêng tôi (tức là xây dựng nó từ đầu). Không mong chờ cái đấy!

+0

Ngay cả khi bạn quản lý để hiển thị bàn phím mềm, onKeyUp()/Down() sẽ không được gọi - ít nhất là không dành cho tất cả các phím và trên tất cả các phiên bản Android. Trong một số phiên bản Android (cũ hơn) (tôi nghĩ 1.5 và có thể 1.6) onKeyDown() được gọi bằng các phím số, nhưng không có chữ cái. Tuy nhiên, nói chung bằng cách sử dụng onKeyDown() để nhận đầu vào bàn phím mềm sẽ không dẫn bạn đến kết quả mong muốn - điều này sẽ chỉ hoạt động đúng cách bằng bàn phím cứng. – ubuntudroid

Trả lời

2

Bạn có thể buộc các Softkeyboard được hiển thị bằng cách sử dụng:

 

InputMethodManager im = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
im.showSoftInput(myView, InputMethodManager.SHOW_FORCED); 
 
+0

Không thay đổi thành SHOW_FORCED.Cũng đã thử requestFocus(); trên edittext nhưng điều đó cũng không hiệu quả. – ang

+0

không hoạt động! (android 4.2) –

4

Các mã sau đây làm việc cho tôi:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 

tôi sử dụng mã này trong một handler onKeyUp khi tôi nhấn "menu ".

+1

không hoạt động! (android 4.2) –

+0

Nó vẫn hoạt động cho tôi. Và trên Android 4.4 là tốt. – miha

+1

Có cách nào để buộc một loại đầu vào nhất định trong trường hợp đó không? như chỉ có chữ số .. thay vì sử dụng 'setRawInputType' –

2

Hãy chắc chắn để cho phép bàn phím mềm cho tầm nhìn của bạn:

setFocusable(true); 
setFocusableInTouchMode(true); 

Sau đó gọi:

InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT); 
+0

không hoạt động! (android 4.2) –

3

Thay vì sử dụng visibility="invisible" bạn có thể đặt android:alpha="0" trên EditText của bạn. Vì vậy, bạn vẫn cần EditText nhưng nó không hiển thị và bạn có thể lấy đầu vào từ softkeyboard bằng onKeyListener()

0

Lưu ý rằng nếu bạn đang làm việc ở chế độ ngang, đầu vào mềm sẽ tạo trường nhập văn bản của riêng nó làm hỏng tất cả sự làm việc chăm chỉ của bạn. Bạn có thể ngăn chặn hành vi này:

// This makes us remain invisible when in landscape mode. 
setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); 

Bây giờ nếu bạn đã thiết lập EditText vô hình, nó sẽ vẫn như bạn đã tạo.

Các vấn đề liên quan