2011-09-01 39 views
9

Tôi có một alertdialog với một editext. Đối với Edittext này, tôi làm cho bàn phím xuất hiện và tôi muốn điều đó khi người dùng nhấn ok hoặc hủy để ẩn bàn phím. Vấn đề kỳ lạ là khi người dùng chọn ok, bàn phím sẽ ẩn, nhưng khi chọn hủy bỏ bàn phím không giấu tôi đang sử dụng cùng một mã cho cả hai trường hợp.Ẩn bàn phím trong AlertDialog

Đây là mã của tôi:

final AlertDialog.Builder alert = new AlertDialog.Builder(this); 

     alert.setTitle(data); 
     final EditText input = new EditText(this); 
     InputFilter[] FilterArray = new InputFilter[1]; 
     FilterArray[0] = new InputFilter.LengthFilter(25); 
     input.setFilters(FilterArray); 
     input.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       InputMethodManager keyboard = (InputMethodManager) 
       getSystemService(Context.INPUT_METHOD_SERVICE); 
       keyboard.showSoftInput(input, 0); 
      } 
     },200); 



     alert.setView(input); 

     alert.setPositiveButton(ok, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       text = input.getText().toString().trim(); 
       Canvas c = new Canvas(bitmapResult); 
       drawTextImage(bitmapResult); 
       saveimage(); 
       InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(input.getWindowToken(), 0); 
      } 
     }); 

     alert.setNegativeButton(cancel, 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         dialog.cancel(); 
         saveimage(); 
         InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
         im.hideSoftInputFromWindow(input.getWindowToken(), 0); 
        } 
       }); 

     alert.show(); 

đâu mystake của tôi? Ai giúp tôi với?

+1

Tôi đã tìm kiếm khắp mọi nơi cho mã đó sẽ buộc các bàn phím để hiển thị trong hộp thoại cho một EditText. Ai biết bạn đã phải trì hoãn nó cho một vài phần nghìn giây đầu tiên. Cảm ơn bạn! – electrichead

+1

Giải pháp tuyệt vời để hiển thị bàn phím :) Tôi đã có một giải pháp không hoạt động cho các phiên bản Android thấp hơn, nhưng các phiên bản của bạn rất tuyệt. Sự chậm trễ thậm chí có thể được cảm thấy như hình ảnh động;) – Poutrathor

Trả lời

22

Tôi tìm thấy giải pháp:

alert.setNegativeButton(cancel, 
    new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      saveimage(); 
      InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
      im.hideSoftInputFromWindow(input.getWindowToken(), 0); 
      dialog.cancel(); 
     } 
    }); 

tôi nên đã đưa dialog.cancel() sau khi tôi ẩn bàn phím.

+0

dialog.cancel sau khi ẩn bàn phím đã làm các trick. – chengsam

0

Không chắc, nhưng bạn có thể thử với việc thêm này:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

Tôi đang sử dụng nó để tránh việc hiển thị đầu tiên của bàn phím khi ứng dụng của tôi bắt đầu ... khi tôi nhấp vào trong lĩnh vực này, các bàn phím vẫn còn mở ...

Vì vậy, có lẽ, nó có thể làm việc với mã của bạn:

keyboard.showSoftInput(input, 0); 

và sau đó tự động đóng nó ...

7

Tôi cũng đã đấu tranh với điều này và bonked đầu của tôi trên chỉ là về mọi "giải pháp" được đăng nhưng bàn phím chết tiệt vẫn sẽ không đóng. Sau đó, tôi đã có một tầm nhìn caffenated:

  InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(dialog.getWindow().getDecorView().getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); 
     } 

Lưu ý HIDE_IMPLICIT_ONLY

hy vọng rằng sẽ giúp bất cứ ai khác phải vật lộn với vấn đề này.

+0

Wow tôi đã hoài nghi điều này sẽ làm việc, giống như bạn, mọi giải pháp khác trên SO đã không làm việc cho tôi, nhưng điều này thực sự đã làm việc! +1 – Justin

+0

1+ cho tùy chọn mà không cần tham khảo EditText – Shirane85

0

Sử dụng phương pháp sau đây trước khi bạn sử dụng dialog.cancel();

public static void hideSoftKeyboardUsingView(Context context,View view) { 

    InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

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