2010-11-23 44 views
47

Tôi đang hiển thị hộp thoại có giao diện edittext. Tuy nhiên, phím chức năng sẽ chỉ mở nếu người dùng nhấn bên trong editview. Vì vậy, tôi đã cố gắng gọi một InputMethodManager với mã sau đây.Hiển thị bàn phím ảo cho hộp thoại

InputMethodManager imm = 
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(dialogField,0); 

Hộp thoạiLoại trường là trường nhập. Tuy nhiên, khi chính xác tôi phải làm điều này? Tôi đã thử nó trong phương thức onStart() của hộp thoại, nhưng không có gì xảy ra. Tôi cũng đã thử yêu cầu tiêu điểm cho dialogField trước đây, nhưng điều đó không thay đổi gì cả.

Tôi cũng đã cố gắng mã này

dialogField.setOnFocusChangeListener(new View.OnFocusChangeListener() 
{ 
    public void onFocusChange (View v, boolean hasFocus) 
    { 
     if (hasFocus) 
     { 
      Main.log("here"); 
      dialogInput.getWindow().setSoftInputMode(
       WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
      /* 
       InputMethodManager mgr = 
        (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       mgr.showSoftInput(dialogField,0); 
      */ 
     } 
    } 
}); 

trong cả hai phiên bản. Nhưng không có bàn phím mềm nào muốn xuất hiện. Main.log chỉ là một bản ghi, cho tôi thấy rằng hàm này thực sự được gọi. Và vâng, nó được gọi.

Tôi có thể lấy bàn phím có cờ SHOW_FORCED trước khi hộp thoại mở ra. Nhưng sau đó nó sẽ không đóng cửa khi thoát. Và tôi chỉ có thể làm điều đó TRƯỚC KHI tôi hiển thị hộp thoại. Bên trong bất kỳ callback nó cũng không hoạt động.

+0

Bạn đã thử cờ SHOW_IMPLICIT chưa? –

+1

Đây là một cái gì đó tôi đã vật lộn với quá mức nhưng đã không thể làm việc đúng cách. – Thomas

+0

Có, tôi đã thử cờ SHOW_IMPLICIT. Tài liệu nói chính xác, bạn nên gọi showSoftInput, nếu người dùng được yêu cầu nhập vào cho TextEdit. Nhưng bằng cách nào? – Rene

Trả lời

-3

Dường như không thể.

Vì vậy, tôi đã thực hiện Hoạt động mới thay vì Hộp thoại và cho phép người dùng chỉnh sửa ở đó. Lưu ý rằng trong các hoạt động bạn có thể đặt chế độ bàn phím trong tệp kê khai. Tôi đặt nó để hiển thị, khi hoạt động mở ra.

Cũng lưu ý rằng thử nghiệm trên trình giả lập bằng các phím cứng sẽ không mở bàn phím cho SHOW_IMPLICIT hoặc 0 cờ.

+1

Vì vậy, điều này không bao giờ có thể? –

+0

Có thể, xem câu trả lời được chấp nhận. –

+0

@MertSerimer Không có câu trả lời được chấp nhận: P – SparK

130

Câu hỏi hay, tôi cũng đang cố gắng làm điều đó và tìm ra giải pháp.

Sử dụng lớp builder thoại AlertDialog.Builder bạn sẽ phải gọi hộp thoại như thế này:

AlertDialog.Builder builder = new AlertDialog.Builder(); 
AlertDialog dialog; 

builder.set... 

dialog = builder.create(); 
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
dialog.show(); 

này làm việc tốt cho tôi.

Lưu ý: bạn phải import android.view.WindowManager.LayoutParams; cho giá trị không đổi tại đó.

+1

hoạt động cho tôi, cảm ơn – ericn

+0

Tôi tự hỏi làm thế nào điều này ảnh hưởng đến hành vi cửa sổ sau khi hộp thoại sẽ đóng lại ... chúng ta không quên rằng cửa sổ chứa hộp thoại và các hoạt động của bạn cũng như –

+0

không đặt bàn phím thành hành vi "luôn bật", điều này chỉ kích hoạt phương pháp bàn phím mở khi hộp thoại đang mở. Sau khi người dùng nhấn "phím quay lại" hoặc rời khỏi trường nhập, bàn phím sẽ đóng lại, giống như bình thường. – SparK

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