2013-03-12 7 views
5

Tôi có một ứng dụng Android chia sẻ danh sách tạp hóa qua email. Tôi gặp rắc rối trong đó sau khi tôi gửi danh sách bằng ứng dụng email (có thể là khách hàng trao đổi hoặc ứng dụng khách Gmail), bàn phím sẽ không đóng.Bàn phím không đóng sau khi trở về từ ứng dụng email

Tôi đã thử:

InputMethodManager mgr = (InputMethodManager) getSystemService(
     Context.INPUT_METHOD_SERVICE); 
mgr.hideSoftInputFromWindow(editTxt.getWindowToken(), 0); 

và nhiều cách khác. Nếu tôi kiểm tra xem bàn phím có đang mở hay không, nó sẽ trả lại false vì nó không phải là ứng dụng được gọi là bàn phím mà là ứng dụng email.

Tôi tìm thấy một workaround bao gồm:

android:windowSoftInputMode="stateAlwaysHidden" 

sau đó ứng dụng sẽ buộc đóng bàn phím, nhưng sẽ tiếp tục tụt hậu mỗi khi tôi mở bàn phím một lần nữa.

Với điện thoại Samsung, sự cố chỉ tồn tại nếu tôi sử dụng ứng dụng khách Gmail.

Trả lời

2

Tìm thấy giải pháp. Sau một vài phần nghìn giây, tiêu điểm thay đổi từ bên ngoài ứng dụng (Email-client) sang chế độ xem editText. Sau đó, tôi có thể đóng bàn phím. Vì vậy, giải pháp của tôi trông giống như sau:

Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 

      @Override 
      public void run() { 
       closeKeyboard(); 
      } 
     }, 20); 
+0

Không có cách nào rõ ràng hơn để biết chính xác thời điểm, tôi giả sử. Ngay cả bằng cách bỏ phiếu, phải không? Đã cố gắng để dính mũi của tôi vào phương pháp đầu vào phương pháp dịch vụ phương pháp và các lĩnh vực cấu trúc dữ liệu 'nhưng không tìm thấy bất cứ điều gì liên quan đến tập trung hiện tại. – Meymann

0

sử dụng android:windowSoftInputMode="stateHidden" trong thẻ activiy của manifest

+0

Tôi đã có. – lagos

+0

u đã đề cập rằng u đã sử dụng stateAlwaysHidden ... thay vì sử dụng stateHidden này. nó hoạt động cho tôi cho các trường hợp tương tự – stinepike

+0

Xin lỗi lỗi của tôi, tôi đề cập đến stateAlwaysHidden vì cũng giống như một giải pháp thay thế bàn phím khi trở về từ một mục đích. – lagos

0

Bạn đặt mã này trong onResume() phương pháp của bạn?

+0

Tôi sử dụng 'startActivityForResult()' để kích hoạt ý định, vì vậy tôi có mã bên trong 'onActivityResult'. Nhưng tôi sẽ thử đặt nó lên phương thức onResume(), đáng để bắn. – lagos

+0

Tôi đã cố gắng để đặt nó trên onResume(), nhưng vấn đề là các ứng dụng không nhận ra rằng bàn phím được mở, kể từ khi ứng dụng không gọi để mở bàn phím. Vì vậy, bàn phím không tập trung vào editTxt, và tôi không thể đóng nó. Tôi cũng đã thử 'InputMethodManager im = (InputMethodManager) this.getApplicationContext(). GetSystemService (Context.INPUT_METHOD_SERVICE); \t \t im.hideSoftInputFromWindow (getCurrentFocus(). GetWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); ' – lagos

+0

Bạn có thể thực hiện một thủ thuật với boolean ... Hãy thử đặt một boolean trong hoạt động này. Khi bạn đến từ một hoạt động khác của ứng dụng của bạn, hãy đặt trên phương thức onCreate() this TRUE boolean ... Khi bạn đến từ ứng dụng email, không instanciate boolean này (hoặc = FALSE) và điều kiện để ẩn bàn phím là khi boolean = FALSE – StephaneT