92 Câu hỏi: Đóng / ẩn Bàn phím mềm Android

câu hỏi được tạo ra tại Thu, Dec 21, 2017 12:00 AM

Tôi có bố cục 49 310 và 49 310.

Sau khi viết vào trường chỉnh sửa và nhấp vào 49 310, tôi muốn ẩn bàn phím ảo. Tôi giả sử rằng đây là một đoạn mã đơn giản, nhưng tôi có thể tìm thấy một ví dụ về nó ở đâu?

    
3497
  1. Điều gì xảy ra nếu bạn chỉ có một EditText và một số nút, như hộp kiểm và radio? Nơi duy nhất bạn cần bàn phím là trong EditText duy nhất. Làm thế nào để bạn đăng ký để biết rằng một cái gì đó khác đã được chọn /nhấp để ẩn bàn phím?
    2011-06-01 15: 48: 11Z
  2. tôi cảm thấy thật ngu ngốc. Tôi không thể ẩn bàn phím trên ICS. Đã thử tất cả các phương pháp ở đây và kết hợp chúng. Không đời nào. Phương pháp để hiển thị nó hoạt động, nhưng tôi không thể che giấu nó bất kể mã thông báo gió, ẩn cờ, cài đặt bảng kê khai hoặc nến cho bất kỳ vị thánh nào. Trên chương trình bàn phím tôi luôn thấy điều này: I /LatinIME (396): InputType.TYPE_NULL được chỉ định W /LatinIME (396): Lớp đầu vào không mong đợi: inputType = 0x00000000 imeOptions = 0x00000000
    2013-05-15 13: 28: 22Z
  3. /** * Phương thức này được sử dụng để ẩn bàn phím mềm. * Hoạt động @param * /công khai void hideSoftPal (Hoạt động hoạt động) {InputMethodManager inputMethodManager = (InputMethodManager) Activity.getSystemService (Activity.INPUT_METHOD_SERVICE); inputMethodManager. SuedeSoftInputFromWindow (Activity.getCienF Focus (). getWindowToken (), 0); }
    2014-01-13 13: 30: 35Z
  4. này hoạt động với tôi
    2014-06-20 12: 45: 04Z
  5. API như thế này là lý do tại sao thế giới cần nhiều Kỹ sư phần mềm hơn, chứ không phải nhiều Nhà khoa học máy tính.
    2017-11-30 21: 38: 52Z
30 Câu trả lời                              30                         

Để giúp làm rõ sự điên rồ này, tôi muốn bắt đầu bằng cách xin lỗi thay mặt cho tất cả người dùng Android vì cách đối xử hết sức lố bịch của bàn phím mềm. Lý do có rất nhiều câu trả lời, mỗi câu trả lời khác nhau, cho cùng một câu hỏi đơn giản vì API này, giống như nhiều câu hỏi khác trong Android, được thiết kế khủng khiếp. Tôi có thể nghĩ không có cách nào lịch sự để nói ra.

Tôi muốn ẩn bàn phím. Tôi hy vọng sẽ cung cấp cho Android tuyên bố sau: 49 310. Kết thúc. Cảm ơn nhiều. Nhưng Android có một vấn đề. Bạn phải sử dụng 49 310 để ẩn bàn phím. OK, tốt, đây là API của Android cho bàn phím. NHƯNG! Bạn được yêu cầu phải có 49 310 để có quyền truy cập vào IMM. Bây giờ chúng tôi có một vấn đề. Tôi có thể muốn ẩn bàn phím khỏi một lớp tĩnh hoặc tiện ích không sử dụng hoặc cần bất kỳ 49 310 nào. hoặc Và FAR tệ hơn, IMM yêu cầu bạn chỉ định 49 310 (hoặc thậm chí tệ hơn, 49 310) mà bạn muốn ẩn bàn phím TỪ.

Đây là điều khiến việc ẩn bàn phím trở nên khó khăn. Google thân mến: Khi tôi đang tìm công thức làm bánh, trên Trái đất sẽ không có 49 310 nào từ chối cung cấp cho tôi công thức đó trừ khi tôi trả lời đầu tiên WHO sẽ ăn bánh ở đâu VÀ nó sẽ được ăn ở đâu !!

Câu chuyện buồn này kết thúc bằng một sự thật xấu xí: để ẩn bàn phím Android, bạn sẽ được yêu cầu cung cấp 2 hình thức nhận dạng: 49 310 và 49 310 hoặc 49 310.

Tôi đã tạo một phương thức tiện ích tĩnh có thể thực hiện công việc RẤT vững chắc, miễn là bạn gọi nó từ 49 310.

 49 310

Xin lưu ý rằng phương thức tiện ích này CHỈ hoạt động khi được gọi từ 49 310! Phương thức trên gọi 49 310 của mục tiêu 49 310 để lấy mã thông báo cửa sổ thích hợp.

Nhưng giả sử bạn muốn ẩn bàn phím khỏi 49 310 được lưu trữ trong 49 310? Bạn không thể sử dụng phương pháp trên cho điều đó:

 49 310

Điều này sẽ không hoạt động vì bạn sẽ chuyển tham chiếu đến máy chủ của 49 310 EditText, sẽ không có kiểm soát tập trung trong khi 49 310 được hiển thị! Ồ Vì vậy, để ẩn bàn phím khỏi các mảnh vỡ, tôi dùng đến mức thấp hơn, phổ biến hơn và xấu hơn:

 49 310

Dưới đây là một số thông tin bổ sung thu được từ việc lãng phí nhiều thời gian hơn để theo đuổi giải pháp này:

Giới thiệu về windowSoftInputMode

Vẫn còn một điểm tranh cãi nữa. Theo mặc định, Android sẽ tự động gán tiêu điểm ban đầu cho 49 310 đầu tiên hoặc điều khiển có thể lấy nét trong 49 310 của bạn. Theo tự nhiên, InputMethod (thường là bàn phím mềm) sẽ phản hồi lại sự kiện lấy nét bằng cách hiển thị chính nó. Thuộc tính 49 310 trong 49 310, khi được đặt thành 49 310, hướng dẫn bàn phím bỏ qua tiêu điểm ban đầu được gán tự động này.

 49 310

Hầu như không thể tin được, dường như không có gì để ngăn bàn phím mở khi bạn chạm vào điều khiển (trừ khi 49 310 và /hoặc 49 310 được gán cho điều khiển). Rõ ràng, cài đặt windowSoftInputMode chỉ áp dụng cho các sự kiện lấy nét tự động, không áp dụng cho các sự kiện lấy nét được kích hoạt bởi các sự kiện chạm.

Do đó, 49 310 thực sự RẤT kém tên. Nó có lẽ nên được gọi là 49 310 thay thế.

Hy vọng điều này sẽ giúp.

CẬP NHẬT: Nhiều cách khác để nhận mã thông báo cửa sổ

Nếu không có chế độ xem tập trung (ví dụ: có thể xảy ra nếu bạn chỉ thay đổi các đoạn), có các chế độ xem khác sẽ cung cấp mã thông báo cửa sổ hữu ích.

Đây là những lựa chọn thay thế cho mã trên 49 310 Chúng không đề cập rõ ràng đến hoạt động của bạn.

Bên trong một lớp phân đoạn:

 49 310

Đưa ra một đoạn 49 310 làm tham số:

 49 310

Bắt đầu từ nội dung của bạn:

 49 310

CẬP NHẬT 2: Xóa tiêu cự để tránh hiển thị lại bàn phím nếu bạn mở ứng dụng từ nền

Thêm dòng này vào cuối phương thức:

49 310

    
1599
2018-11-27 08: 34: 00Z
  1. Tôi không nghĩ bạn nên sửa đổi softInputMode. Điều này sẽ ghi đè cài đặt AndroidManifest.
    2014-01-09 07: 26: 21Z
  2. . để ẩn bàn phím khỏi). Ngoài ra, tôi tin rằng 49 310 nên đến từ máy chủ 49 310 thay vì 49 310
2015-04-20 18: 30: 54Z
  • @ rmirabelle Trong một 49 310 có vẻ như bạn có thể sử dụng 49 310
    2015-06-11 16: 09: 10Z
  • google thực sự nên cung cấp tiện ích 49 310
    2016-10-18 09: 47: 38Z
  • thx !! đã giúp tôi, và đây không phải là điều đầu tiên tôi thấy rất cong trong Android, rất nhiều lỗi và những thứ hoạt động cho một và không hoạt động cho ... mỗi điều khiển với hành vi khác nhau của anh ấy, mọi thứ không giống nhau, điều này làm cho nó khó khăn để làm việc và phát triển ...
    2017-09-05 12: 02: 26Z
  • 2019-02-28 07: 59: 57Z
    1. Cảm ơn điều này dường như hoạt động rất tốt nếu sử dụng 0 làm tham số thứ hai. Nhưng nếu tôi sử dụng InputMethodManager.HIDE_IMPLICIT_ONLY thì bàn phím không bao giờ bị ẩn (mặc dù tôi không giữ menu). Có gợi ý nào không?
      2010-06-23 22: 50: 24Z
    2. Tuyệt vời. Chỉ cần làm rõ, điều này chỉ loại bỏ nó nếu có, nhưng sẽ không ngăn nó bật lên, phải không?
      2011/02/2016 19: 48: 24Z
    3. Có thể hữu ích khi gọi editText.clearF Focus () trước khi ẩn softInput
      2013-10-01 19: 51: 31Z
    4. Gọi 49 310 sau đó 49 310 thậm chí hoạt động trên 49 310
      2013-11-30 12: 57: 56Z
    5. Điều gì đã làm việc cho tôi trên 4.4 /htc đã thực thi 49 310 để có được chắc chắn chế độ xem hiện đang tập trung, gọi 49 310, rồi 49 310 ( có cờ rõ ràng).
      2015-08-13 00: 12: 17Z

    Cũng hữu ích để ẩn bàn phím mềm là:

     49 310

    Điều này có thể được sử dụng để chặn bàn phím mềm cho đến khi người dùng thực sự chạm vào Chế độ xem Chỉnh sửa.

        
    775
    2014-11-24 16: 07: 40Z
    1. Bạn cũng có thể đạt được hiệu quả tương tự bằng cách thêm android: windowSoftInputMode = "stateHidden" vào hoạt động của bạn trong tệp kê khai.
      2012-08-10 16: 09: 11Z
    2. Đã thử điều này trong một đoạn (tham chiếu hoạt động sở hữu) trên API cấp 9 và nó không hoạt động một cách đáng tiếc. Đã thử gọi nó trong onResume và onActivityCreated - không có hiệu lực.
      2013-03-10 16: 07: 44Z
    3. Tôi đang làm việc trong một hộp thoại và điều này đã hoạt động. Tôi đang sử dụng Android 3.2. Tôi đặt nó trong phương thức onCreateDialog (Bundle). Nó không hoạt động trong phương thức onCreate. Hộp thoại hộp thoại = super.onCreateDialog (yetInstanceState); hộp thoại.getWindow (). setSoftInputMode (WindowManager.LayoutParams. SOFT_INPUT_STATE_ALWAYS_HIDDEN); Kết quả là chế độ xem của tôi với EditTexts trong đó hiển thị mà không cần bàn phím. Khi người dùng chạm vào văn bản chỉnh sửa, bàn phím sẽ hiển thị.
      2013/07/03 05: 12: 55Z
    4. Điều này không hoạt động khi tiêu điểm vẫn nằm trong EditText (như, sau khi chạm vào nút). Sử dụng giải pháp của Reto cho điều đó.
      2013-07-09 06: 48: 43Z
    5. Tại sao ghi đè cài đặt tệp kê khai là một ý tưởng tồi? Tôi đang gọi điều này từ một mảnh. Không có cài đặt tệp kê khai nào áp dụng cho một đoạn ...
      2014-04-24 00: 48: 59Z

    Tôi có thêm một giải pháp để ẩn bàn phím:

     49 310

    Ở đây vượt qua 49 310 ở vị trí 49 310 và 49 310 ở vị trí 49 310. Nó sẽ đóng mạnh Bàn phím mềm.

        
    326
    2016-06-27 15: 26: 34Z
    1. Bạn đang sử dụng cờ ẩn trong tham số showflags. Điều này chỉ hoạt động vì các hằng số sử dụng cùng một số nguyên. Ví dụ sử dụng các cờ chính xác
      2013-03-23 ​​14: 35: 12Z
    2. đã thử nghiệm trên Android 4.0, tôi thích solu nàytion, vì tôi có nhiều văn bản chỉnh sửa, các nút trên hoạt động đó, có thể có tiêu điểm
      2013-05-16 15: 04: 21Z
    3. Tại sao điều này hiển thị bàn phím nếu nó bị ẩn? :)
      2013-06-08 19: 33: 31Z
    4. @ Mark: Bởi vì phương thức này được gọi là "toggleSoftInput", không phải "hideSoftInput" :)
      2013-08-30 02: 08: 40Z
    5. Giải pháp này hiển thị bàn phím nếu nó bị ẩn. Điều đó không đúng
      2016-05-14 20: 14: 25Z
    Giải pháp của

    Meier cũng phù hợp với tôi. Trong trường hợp của tôi, cấp cao nhất của Ứng dụng của tôi là một tabhost và tôi muốn ẩn từ khóa khi chuyển đổi các tab - Tôi nhận được mã thông báo cửa sổ từ Chế độ xem tabhost.

     49 310     
    142
    2014-11-24 15: 54: 56Z
    1. Tôi cũng nhận được điều này để làm việc với SearchView. Xem dưới đây cho câu trả lời của tôi. Cảm ơn mckoss!
      2014-07-06 23: 43: 58Z

    Vui lòng thử mã dưới đây trong 49 310

     49 310     
    130
    2018-05-24 18: 15: 06Z
    1. Phương thức này hoạt động như một phương tiện để khắc phục lỗi "không thể ẩn bàn phím mềm" trong 2.0 và 2.1 như được mô tả trong code.google.com/p/android/issues/detail?id=7115 ... phương thức hideSoftInputFromWindow được liệt kê ở trên không hoạt động khi tôi đã thử nó, nhưng editView.setInputType (0) đã làm.
      2010-04-17 05: 50: 54Z
    2. Đây là hợp pháp theo Javadoc (không phải là hack) mặc dù tôi sẽ viết lại phương thức thành 49 310
      2010-10-11 20: 49: 27Z
    3. tuy nhiên, nó ẩn Android: gợi ý. Tôi đang sử dụng Android 1.5
      2012-01-11 10: 32: 12Z
    4. @ Bostone Điều này không hoạt động đối với SearchView
      2014-06-20 09: 11: 03Z
    5. điều này rất phù hợp khi bạn cần đóng bàn phím từ hộp thoại, không cần lấy ví dụ hoặc bất cứ điều gì và có thể gán nó cho tất cả các văn bản chỉnh sửa khi người dùng nhấn nút đóng hộp thoại
      2014-12-26 21: 38: 05Z

    Cập nhật: Tôi không biết tại sao giải pháp này không còn hiệu quả nữa (tôi mới thử nghiệm trên Android 23). Vui lòng sử dụng giải pháp Saurabh Pareek thay thế. Đây là:

     49 310

    Câu trả lời cũ:

     49 310     
    122
    2017-05-23 12: 10: 54Z
    1. Tôi nên đặt mã này ở đâu? Tôi đã cố gắng dán getWindow (). SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); trong onCreate () nhưng bàn phím không bao giờ bị ẩn
      2013-07-15 18: 20: 10Z
    2. không hoạt động, đã được thử nghiệm trong radiogroup.setOnCheckedChangeListener, API 23
      2015-08-06 16: 50: 14Z
    3. Nếu bạn nhìn kỹ hơn, InputMethodManager.HIDE_IMPLICIT_ONLY và InputMethodManager.SHOW_IMPLICIT có cùng giá trị, đó là "1", do đó không có sự khác biệt giữa các cuộc gọi này. = > không hoạt động
      2016-08-18 10: 43: 08Z
    4. nếu gọi im.toggleSoftInput (InputMethodManager.HIDE_IMPLICIT_ONLY, 0); sau đó bàn phím sẽ hiển thị trên màn hình :) Cách thực hiện tốt nhất là: github.com/ravindu1024/android-keyboardlistener Xấu hổ trên SDK Android
      2016-11-29 10: 15: 53Z
    5. 49 310 - vì đó là Android , mọi thứ sẽ có thể thay đổi, có thể một phần do thiết kế xấu ... Chúng tôi viết một cách bất cẩn, sau đó chúng tôi tấn công tất cả và viết lại mọi thứ.
      2016-12-16 04: 22: 07Z
     49 310     
    79
    2018-11-28 10: 55: 30Z
    1. Điều này hiệu quả với tôi! Nhưng tại sao bạn lại đặt input.setInputType (0) ? Tôi không thể tương tác với EditTextView khi tôi có dòng mã đó (Nó hoạt động khi tôi xóa nó).
      2014-04-10 13: 52: 53Z
    2. Có thể là 49 310.
      2018-09-19 14: 28: 11Z
    3. Tôi đã xóa 49 310 khỏi mã này. Nó đã thay đổi hành vi bàn phím và 49 310 cho 49 310.
      2018-11-28 10: 56: 21Z

    Nếu tất cả các câu trả lời khác ở đây không phù hợp với bạn như bạn muốn, thì có một cách khác để điều khiển bàn phím theo cách thủ công.

    Tạo một hàm với đó sẽ quản lý một số thuộc tính của 49 310:

     49 310

    Sau đó, hãy đảm bảo rằng OnF Focus của 49 310 bạn mở /đóng bàn phím:

     49 310

    Bây giờ, bất cứ khi nào bạn muốn mở bàn phím, hãy gọi thủ công:

     49 310

    Và để kết thúc cuộc gọi:

     49 310     
    66
    2014-11-24 15: 55: 42Z
    1. + 1 - Nếu bạn muốn bắt đầu một hoạt động với bàn phím đóng, hãy sử dụng giải pháp này và thêm một onclicklistener đặt setEditTextF Focus (true). Hoạt động như charme!
      2012-06-06 14: 36: 15Z
    2. Tôi đã nhận được 'Không thể giải quyết bối cảnh ký hiệu', trên dòng thứ 7 và thứ 10 của khối mã thứ hai.
      2017 /02-28 17: 02: 15Z
    3. Sử dụng getContext () thay vì
      2017 /02-28 17: 04: 15Z

    Saurabh Pareek có câu trả lời hay nhất cho đến nay.

    Cũng có thể sử dụng các cờ chính xác.

     49 310

    Ví dụ về sử dụng thực tế

     49 310     
    57
    2017-05-23 11: 55: 19Z
    1. Trong 2.1, bàn phím bật lên bằng mọi cách, sau đó ẩn đi. Không tốt.
      2013-03-26 17: 27: 54Z
    2. Đây là hiệu quả nhất cho phiên bản mới nhất. Một người sẽ luôn cần phải điều chỉnh nó cho các phiên bản cũ hơn. Đặc biệt là trước v3.
      2013-04-25 14: 34: 11Z
    3. Không thể giải quyết phương thức getSystemService () bằng Fragment!
      2013-07-17 06: 21: 51Z
    4. @ Mazen: sử dụng 49 310
      2013-07-29 10: 56: 31Z
    5. Không. Trên Tab Samsung, Android 5.0 của tôi, mã được gọi là "ẩn bàn phím" ở trên sẽ TẠO bàn phím mềm - nếu nó đã bị ẩn, nó sẽ hiển thị nó. Có một lý do chức năng này có tên TOGGLE trong tên.
      2015-11-13 03: 22: 20Z

    từ việc tìm kiếm, ở đây tôi đã tìm thấy câu trả lời phù hợp với mình

     49 310     
    52
    2015-04-24 21: 09: 51Z

    Câu trả lời ngắn

    Trong trình nghe 49 310 của bạn, hãy gọi 49 310 của 49 310 với 49 310

     49 310

    Xem chi tiết

    Tôi cảm thấy phương pháp này tốt hơn, đơn giản hơn và phù hợp hơn với mẫu thiết kế của Android. Trong ví dụ đơn giản ở trên (và thường là trong hầu hết các trường hợp phổ biến), bạn sẽ có 49 310 có /có tiêu điểm và nó cũng thường là bàn phím để gọi bàn phím ở vị trí đầu tiên (nó chắc chắn có thể gọi nó trong nhiều tình huống phổ biến). Theo cách tương tự, phải là người phát hành bàn phím, thông thường có thể được thực hiện bởi 49 310. Chỉ cần xem cách 49 310 với 49 310 hoạt động, bạn muốn đạt được hành vi tương tự bằng cùng một cách.

    Kiểm tra câu trả lời liên quan này

        
    49
    2017-05-23 12: 10: 54Z
    1. Đây là câu trả lời. Chỉ có phương pháp hoạt động phiên bản chéo. Tôi đã quay lại câu hỏi này để đăng câu trả lời này vì tôi không nghĩ có ai khác biết
      2015 /02-05 07: 23: 10Z
    2. Đây phải là câu trả lời đúng. Thay vì lừa Android để ẩn bàn phím khi nó thực sự cần ở đó, chúng tôi nói với người dùng rằng đã hoàn thành, điều này sẽ kích hoạt ImeAction [tên ngu ngốc, tôi thừa nhận] như thể người dùng đã nhấp vào "DONE" trên bàn phím . Bằng cách này, sẽ không có gì khác biệt nếu người dùng xác nhận nhập liệu trên bàn phím hoặc nhấn nút UI.
      2015-05-08 16: 03: 12Z

    Điều này sẽ hoạt động:

     49 310     
    44
    2016-07-15 14: 51: 17Z
    1. Đã hoạt động một phần, ngay cả khi bàn phím bị ẩn "isActive ()" trả về false!
      2013-10-04 18: 27: 03Z
    2. Tất nhiên là nó phải như vậy. Hoặc có thể tôi không hiểu bạn. Dù sao, bạn có thể bổ sung cho lớp bằng các phương thức 49 310 và 49 310 để có quyền kiểm soát nhiều hơn khi nào nó sẽ hiển thị và khi nào không. Làm việc cho tôi, tôi cũng đã làm như vậy :) Tôi sẽ chỉnh sửa ví dụ
      2013-10-05 07: 55: 39Z
    3. @ YoushaAleayoub, đúng vậy. 49 310
      2016-07-15 14: 46: 54Z
    4. @ slinden77, lol, tôi đang nói vềCâu trả lời của bạn ... không phải cái này bạn đã nhận xét. Vì vậy, câu trả lời vẫn KHÔNG hoạt động.
      2016-07-16 16: 55: 06Z
    5. @ YoushaAleayoub uhm đúng vậy. Câu hỏi ban đầu không đề cập đến các mảnh vỡ, bạn là người đã đề cập đến các mảnh vỡ. Vì vậy, câu trả lời của tôi là hoàn toàn hợp lệ. Để sử dụng nó với các đoạn, hãy gọi phương thức khác với 49 310, như nhận xét. Tìm hiểu làm thế nào để sử dụng phương pháp xin vui lòng và sau đó quay trở lại. Bạn đang nhầm lẫn mọi người với câu trả lời ngớ ngẩn của bạn
      2016-07-17 16: 48: 09Z

    Tôi đang sử dụng bàn phím tùy chỉnh để nhập số Hex nên tôi không thể hiển thị bàn phím IMM ...

    Trong v3.2.4_r1 49 310 đã được thêm vào để kiểm soát thời tiết hoặc không hiển thị bàn phím khi TextView được lấy nét, nhưng nó vẫn bị ẩn nên phải sử dụng phản chiếu:

     49 310

    Đối với các phiên bản cũ hơn, tôi đã nhận được kết quả rất tốt (nhưng không hoàn hảo) với 49 310, được thêm vào với sự trợ giúp của 49 310 từ chế độ xem gốc của tôi và sau đó kiểm tra xem bàn phím có được hiển thị như sau không:

     49 310

    Giải pháp cuối cùng này có thể hiển thị bàn phím trong tích tắc và làm rối với tay cầm lựa chọn.

    Khi trong bàn phím vào toàn màn hình, onGlobalLayout không được gọi. Để tránh điều đó, hãy sử dụng TextView # setImeOptions (int) hoặc trong khai báo TextView XML:

     49 310

    Cập nhật: Chỉ tìm thấy những hộp thoại sử dụng để không bao giờ hiển thị bàn phím và hoạt động trong tất cả các phiên bản:

     49 310     
    40
    2012-05-28 20: 48: 33Z
    1. Cảm ơn bạn. Hai cờ FLAG_ALT_FOCUSABLE_IM và FLAG_ALT_FOCUSABLE_IM thực tế là điều duy nhất giúp ích trong trường hợp của tôi. Tôi không muốn một bàn phím được hiển thị trong hoạt động của mình - ngay cả khi người dùng nhấp vào một edittext. (Tôi đã tạo "bàn phím" của riêng mình).
      2012-08-13 19: 33: 04Z
    2. các cờ FLAG_ALT_FOCUSABLE_IM đã giải quyết vấn đề của tôi
      2013-01-25 16: 01: 49Z
    3. Tuy nhiên, nếu giải pháp tuyệt vời của bạn không ở chế độ toàn màn hình, bàn phím sẽ hiển thị phía sau nó. Ngoài ra, hỗ trợ di chuyển con trỏ của bàn phím vẫn còn hiển thị. Và nó không thể lột da.
      2013-03-26 17: 42: 09Z
    4. Tôi thứ hai. Trong tất cả các cách có thể, chỉ có phương thức getWindow (). SetFlags () hoạt động, ít nhất là trên Android 5.1. Lưu ý rằng setSoftInputShownOnF Focus () hiện được đặtShowSoftInputOnF Focus () và không còn bị ẩn nhưng không hoạt động, ít nhất là không khi người dùng chạm vào trường.
      2015-12-20 19: 04: 34Z
    5. "Cập nhật" của bạn là giải pháp làm việc duy nhất cho tôi. Tôi đang tìm giải pháp ít nhất hai giờ :)
      2016-08-08 19: 05: 38Z
     49 310     
    31
    2015-06-01 13: 36: 12Z

    Tôi đã dành hơn hai ngày để nghiên cứu tất cả các giải pháp được đăng trong chuỗi và nhận thấy chúng thiếu theo cách này hay cách khác. Yêu cầu chính xác của tôi là có một nút sẽ hiển thị độ tin cậy 100% hoặc ẩn bàn phím trên màn hình. Khi bàn phím ở trạng thái ẩn sẽ không xuất hiện lại, bất kể trường nhập nào người dùng nhấp vào. Khi ở trạng thái hiển thị, bàn phím sẽ không biến mất cho dù người dùng nhấp vào nút nào. Điều này cần phải hoạt động trên Android 2.2 trở lên cho đến các thiết bị mới nhất.

    Bạn có thể thấy một triển khai làm việc củacái này trong ứng dụng của tôi RPN sạch .

    Sau khi thử nghiệm nhiều câu trả lời được đề xuất trên một số điện thoại khác nhau (bao gồm cả thiết bị froyo và bánh gừng), rõ ràng các ứng dụng Android có thể tin cậy:

    1. Tạm thời ẩn bàn phím. Nó sẽ xuất hiện lại khi người dùng tập trung vào một trường văn bản mới.
    2. Hiển thị bàn phím khi một hoạt động bắt đầu và đặt cờ trên hoạt động cho biết bàn phím của họ nên luôn luôn được nhìn thấy Cờ này chỉ có thể được đặt khi một hoạt động khởi tạo.
    3. Đánh dấu một hoạt động không bao giờ hiển thị hoặc cho phép sử dụng bàn phím. Cờ này chỉ có thể được đặt khi một hoạt động khởi tạo.

    Đối với tôi, tạm thời ẩn bàn phím là không đủ. Trên một số thiết bị, nó sẽ xuất hiện lại ngay sau khi một trường văn bản mới được tập trung. Vì ứng dụng của tôi sử dụng nhiều trường văn bản trên một trang, việc tập trung vào trường văn bản mới sẽ khiến bàn phím ẩn bật lại.

    Thật không may, mục 2 và 3 trong danh sách chỉ có độ tin cậy hoạt động khi một hoạt động đang được bắt đầu. Khi hoạt động đã hiển thị, bạn không thể ẩn hoặc hiển thị bàn phím vĩnh viễn. Mẹo nhỏ là thực sự khởi động lại hoạt động của bạn khi người dùng nhấn nút chuyển đổi bàn phím. Trong ứng dụng của tôi khi người dùng nhấn vào nút bàn phím chuyển đổi, đoạn mã sau sẽ chạy:

     49 310

    Điều này khiến cho hoạt động hiện tại được lưu trạng thái vào Gói và sau đó hoạt động được bắt đầu, đi qua một boolean cho biết liệu bàn phím sẽ được hiển thị hay ẩn đi.

    Bên trong phương thức onCreate, đoạn mã sau được chạy:

     49 310

    Nếu bàn phím mềm phải được hiển thị, thì InputMethodManager được yêu cầu hiển thị bàn phím và cửa sổ được hướng dẫn để làm cho đầu vào mềm luôn hiển thị. Nếu bàn phím mềm bị ẩn thì WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM được đặt.

    Cách tiếp cận này hoạt động đáng tin cậy trên tất cả các thiết bị tôi đã thử nghiệm - từ điện thoại HTC 4 tuổi chạy Android 2.2 cho đến nexus 7 chạy 4.2.2. Nhược điểm duy nhất với phương pháp này là bạn cần cẩn thận với việc xử lý nút quay lại. Vì ứng dụng của tôi về cơ bản chỉ có một màn hình (là máy tính), tôi có thể ghi đè onBackPression () và quay lại màn hình chính của thiết bị.

        
    28
    2018-03-06 07: 10: 29Z
    1. cách giải quyết phức tạp, nhưng tôi nghĩ rằng nó quá nhiều, để tạo lại hàng ngàn đối tượng chỉ để ẩn Bàn phím. Tôi không biết ai đã thiết kế IMM cho Android, nhưng nó có mùi giống như Windows APi. Theo tôi, một IME tốt nên có hai phương pháp: ẩn và hiển thị: -)
      2013-05-15 13: 43: 12Z
    2. Hoàn toàn đúng, nhưng cách giải quyết của tôi có một lợi thế - nó luôn hoạt động! Không có giải pháp nào khác tôi có thể tìm thấy luôn luôn chuyển đổi bàn phím, bất kể trường nào trong UI có trọng tâm, người dùng đã làm gì để chuyển đổi và bàn phím và phiên bản Android nào họ đang chạy: - \
      2013-05-20 11: 35: 55Z
    3. Man, tôi hoàn toàn tuyệt vọng để ẩn bàn phím. Đã thử hàng ngàn thứ và noooone hoạt động. Nhưng cách giải quyết của bạn là quá nhiều đối với tôi, tôi phải tạo lại như 10 đoạn, khởi tạo dịch vụ, xóa rất nhiều WeakReferences .... bạn biết không? GC sẽ vứt đi như 25mb: S ... Vẫn đang tìm kiếm một cách đáng tin cậy để làm điều đó: (
      2013-05-20 14: 57: 45Z
    4. @ Dmitry cũng không phải là một thế giới xin chào ... đây là một ứng dụng phức tạp cho máy tính bảng. Tôi từ chối hoàn toàn dỡ nó khỏi bộ nhớ chỉ để ẩn một bàn phím ngớ ngẩn ... Dù sao tôi cũng tìm thấy thứ gì đó hoạt động kết hợp hàng ngàn giải pháp được đề xuất ở đây :)
      2013-10-08 16: 21: 53Z

    Cách khác để giải pháp này xung quanh , nếu bạn muốn đóng bàn phím mềm từ mọi nơi không có tham chiếu đến trường (EditText) đã được sử dụng để mở bàn phím, nhưng vẫn muốn làm điều đó nếu trường được tập trung, bạn có thể sử dụng trường này (từ Hoạt động):

    49 310     
    25
    2017-05-23 12: 10: 54Z

    Nhờ câu trả lời SO này , tôi đã rút ra được những điều sau đây, trong trường hợp của tôi, hoạt động độc đáo khi cuộn qua các đoạn của ViewPager ...

     49 310     
    23
    2017-05-23 12: 34: 58Z

    Các câu trả lời trên hoạt động cho các kịch bản khác nhau nhưng Nếu bạn muốn ẩn bàn phím trong chế độ xem và đấu tranh để có ngữ cảnh phù hợp, hãy thử điều này:

     49 310

    và để lấy bối cảnh tìm nạp nó từ hàm tạo :)

     49 310     
    20
    2015-04-24 21: 10: 37Z

    Nếu bạn muốn đóng bàn phím mềm trong quá trình kiểm tra đơn vị hoặc chức năng, bạn có thể làm như vậy bằng cách nhấp vào "nút quay lại" từ bài kiểm tra của mình:

     49 310

    Tôi đặt "nút quay lại" trong dấu ngoặc kép, vì ở trên không kích hoạt 49 310 cho Hoạt động được đề cập. Nó chỉ đóng bàn phím.

    Đảm bảo tạm dừng một chút trước khi tiếp tục, vì phải mất một chút thời gian để đóng nút quay lại, do đó, các lần nhấp tiếp theo vào Lượt xem, v.v., sẽ không được đăng ký cho đến sau khi tạm dừng ngắn (1 giây là đủ dài ime).

        
    18
    2011-12-13 21: 55: 41Z

    Đây là cách bạn làm điều đó trong Mono cho Android (AKA MonoDroid)

     49 310     
    15
    2012-05-15 01: 36: 10Z
    1. 49 310 trong đoạn trích là gì?
      2012-11-26 19: 14: 36Z
    2. @ PCoder tôi nghĩ rằng edittext của nó
      2016-10-24 13: 16: 51Z

    Điều này hoạt động với tôi cho tất cả các hành vi bàn phím kỳ quái

     49 310     
    15
    2015-04-24 21: 11: 16Z
    1. Hãy nghĩ rằng tôi đã thử 10 câu trả lời trước câu này. Đã từ bỏ hy vọng. Cảm ơn người đàn ông.
      2016-01-20 20: 33: 14Z
    2. mRootView là gì?
      2018-11-28 19: 49: 54Z

    Thêm vào hoạt động của bạn 49 310 trong tệp Bản kê khai. Ví dụ:

     49 310     
    14
    2016-02-04 12: 21: 40Z

    sử dụng

    này  49 310     
    12
    2013-08-09 13: 42: 00Z

    Đối với trường hợp của tôi, tôi đã sử dụng SearchView trong thanh hành động. Sau khi người dùng thực hiệnmột tìm kiếm, bàn phím sẽ bật lại.

    Sử dụng InputMethodManager không đóng bàn phím. Tôi đã phải xóa Lấy nét và đặt tiêu điểm của chế độ xem tìm kiếm thành sai:

     49 310     
    12
    2015-04-24 21: 10: 48Z
    1. Rất thông minh. Nếu người dùng muốn tìm kiếm khác, chỉ cần nhấp vào tìm kiếm lại.
      2013-03-23 ​​14: 48: 56Z
    2. SearchView không có 49 310 trong các trang API của Android, vì vậy điều này không hiệu quả với tôi, nhưng một giải pháp khác đã làm (xem câu trả lời của tôi bên dưới).
      2014-07-06 23: 46: 34Z
    3. 2016-04-18 21: 50: 37Z

    Chỉ cần sử dụng mã được tối ưu hóa này trong hoạt động của bạn:

     49 310     
    12
    2015-04-24 21: 11: 54Z

    Tôi gần như đã thử tất cả các câu trả lời này, tôi đã gặp một số vấn đề ngẫu nhiên, đặc biệt là với samsung galaxy s5.

    Điều tôi kết thúc là buộc chương trình và ẩn và nó hoạt động hoàn hảo:

     49 310     
    12
    2015-05-15 12: 40: 06Z

    Trong một số trường hợp, phương pháp này có thể hoạt động ngoại trừ tất cả các phương pháp khác. Điều này tiết kiệm trong ngày của tôi :)

     49 310     
    12
    2016-02-04 11: 46: 12Z

    Phương pháp đơn giản và dễ sử dụng, chỉ cần gọi hidePalFrom (YourActivity.this); để ẩn bàn phím

     49 310     
    12
    2017 /02-21 06: 52: 20Z

    Đối với Bàn phím mở:

     49 310

    Để đóng /ẩn bàn phím:

     49 310     
    11
    2015 /02-05 12: 39: 18Z
    1. cảm ơn nó hoạt động với tôi
      2017-07-14 13: 46: 00Z
    Button
    nguồn đặt đây