92 Soru: Android Soft Keyboard'u kapatın / gizleyin

tarafından oluşturulan soru Thu, Dec 21, 2017 12:00 AM

Düzenimde EditText ve Button var.

Düzenleme alanına yazdıktan ve Button'a tıkladıktan sonra sanal klavyeyi gizlemek istiyorum. Bunun basit bir kod parçası olduğunu varsayıyorum, ancak bunun bir örneğini nereden bulabilirim?

    
3497
  1. Yalnızca bir EditText ve onay kutuları ve radyolar gibi birkaç düğmeniz varsa? Klavyeye ihtiyacınız olan tek yer tek bir EditText'tir. Klavyeyi gizlemek için başka bir şeyin seçildiğini /tıklandığını bilmek için nasıl kayıt olabilirsiniz?
    2011-06-01 15: 48: 11Z
  2. kendimi aptal hissediyorum. Klavyeyi ICS'ye gizleyemiyorum. Burada tüm yöntemleri ve bunların kombinasyonlarını denedim. Olmaz. Bunu gösterme yöntemi işe yarıyor, ama ne rüzgâr belirteci, bayrak gizlemek, herhangi bir aziz için tezahürat ayarları veya mumlar farketmeksizin onu gizleyemiyorum. Klavyede her zaman şunu görüyorum: I /LatinIME (396): InputType.TYPE_NULL belirtildi W /LatinIME (396): Beklenmeyen giriş sınıfı: inputType = 0x00000000 imeOptions = 0x00000000
    2013-05-15 13: 28: 22Z
  3. /** * Bu yöntem, yumuşak klavyeyi gizlemek için kullanılır. * @param etkinliği * /public void hideSoftKeyboard (Etkinlik etkinliği) {InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService (Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow (activity.getCurrentFocus (). getWindowToken (), 0); }
    2014-01-13 13: 30: 35Z
  4. bu benim için çalıştı
    2014-06-20 12: 45: 04Z
  5. Bunun gibi API'ler, dünyanın daha fazla Bilgisayar Bilimcisi için değil, daha fazla Yazılım Mühendisine ihtiyaç duymasının nedenidir.
    2017-11-30 21: 38: 52Z
30 Yanıtlar                              30                         

Bu deliliğin netleşmesine yardımcı olmak için, Google’ın yazılım klavyesindeki düpedüz saçma davranışı için tüm Android kullanıcıları adına özür dileyerek başlamak istiyorum. Bunun nedeni, her biri farklı, aynı basit soru için farklı cevaplar olmasının nedeni, bu API, Android'deki diğerleri gibi, korkunç bir şekilde tasarlanmış. Bunu söylemenin kibar bir yolu olmadığını düşünebilirim.

Klavyeyi gizlemek istiyorum. Android'e şu ifadeyi vermeyi bekliyorum: Keyboard.hide(). Son. Çok teşekkür ederim. Ancak Android'in bir sorunu var. Klavyeyi gizlemek için InputMethodManager'u kullanmanız gerekir. Tamam, tamam, bu Android'in klavyedeki API'si. FAKAT! IMM'ye erişmek için Context'a sahip olmanız gerekir. Şimdi bir sorunumuz var. Klavyeyi, herhangi bir Context için kullanımı veya ihtiyacı olmayan statik veya yardımcı programdan gizlemek isteyebilirim. veya Daha da kötüsü, IMM hangi View'u (veya daha kötüsü, hangi Window'u) klavyeyi FROM'dan gizlemek istediğinizi belirtmenizi gerektirir.

Klavyeyi gizlemeyi bu kadar zorlaştıran şey budur. Sevgili Google: Bir kek tarifine bakarken, dünyada kim tarafından kekin yenileceğini ve nerede yenileceğini ilk kez cevaplamadığım sürece bana tarif vermeyi reddedecek RecipeProvider diye bir şey yok !!

Bu üzücü hikaye çirkin gerçeği ile bitiyor: Android klavyesini gizlemek için, 2 tip kimlik tanımlamanız gerekecek: Context ve View veya Window.

Activity’dan çağırmanız koşuluyla, işi çok katı bir şekilde yapabilen statik bir yardımcı program yöntemi oluşturdum.

 
public static void hideKeyboard(Activity activity) {
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    //Find the currently focused view, so we can grab the correct window token from it.
    View view = activity.getCurrentFocus();
    //If no view currently has focus, create a new one, just so we can grab a window token from it
    if (view == null) {
        view = new View(activity);
    }
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

Bu yardımcı program yönteminin SADECE Activity'dan çağrıldığında işe yaradığını unutmayın! Yukarıdaki yöntem, uygun pencere belirtecini almak için hedef getCurrentFocus'un Activity'unu çağırır.

Ancak, klavyeyi EditText'da barındırılan DialogFragment'dan gizlemek istediğinizi varsayalım. Bunun için yukarıdaki yöntemi kullanamazsınız:

 
hideKeyboard(getActivity()); //won't work

Bu işe yaramayacakAuse, Fragment gösterilirken odaklanmış kontrole sahip olmayan Activity sunucusundaki Fragment referansını geçeceksiniz! Vaov! Bu nedenle, klavyeyi parçalardan gizlemek için daha düşük seviyeli, daha yaygın ve çirkinlere başvuruyorum:

 
public static void hideKeyboardFrom(Context context, View view) {
    InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

Aşağıda, bu çözümü kovalamakla harcadığınız zamandan toplanan bazı ek bilgiler verilmiştir:

WindowSoftInputMode hakkında

Dikkat edilmesi gereken başka bir çekişme noktası var. Varsayılan olarak, Android otomatik olarak ilk odağı ilk EditText'a ya da Activity'unuzdaki odaklanabilir kontrole atayacaktır. Doğal olarak, InputMethod'un (tipik olarak yumuşak klavyenin) focus olayına kendini göstererek yanıt vereceği sonucu çıkar. windowSoftInputMode'daki AndroidManifest.xml niteliği, stateAlwaysHidden olarak ayarlandığında, klavyeye otomatik olarak atanan bu ilk odağı yoksaymasını söyler.

 
<activity
    android:name=".MyActivity"
    android:windowSoftInputMode="stateAlwaysHidden"/>

Neredeyse inanılmaz bir şekilde, kontrole dokunduğunuzda klavyenin açılmasını önlemek için hiçbir şey yapmıyor gibi görünüyor (kontrole focusable="false" ve /veya focusableInTouchMode="false" atanmamışsa). Görünüşe göre, windowSoftInputMode ayarı, dokunma olayları tarafından tetiklenen olaylara odaklanma yerine, yalnızca otomatik odak olaylarına uygulanır.

Bu nedenle, stateAlwaysHidden gerçekten kötü bir şekilde adlandırılmıştır. Bunun yerine belki de ignoreInitialFocus olarak adlandırılmalıdır.

Bu yardımcı olur umarım.


GÜNCELLEME: Pencere belirteç almanın diğer yolları

Odaklanmış bir görünüm yoksa (örneğin, parçaları yeni değiştirdiyseniz gerçekleşebilir), yararlı bir pencere belirteci sağlayacak başka görüşler de vardır.

Bunlar yukarıdaki if (view == null) view = new View(activity); numaralı kodun alternatifleridir. Bunlar açıkça etkinliğiniz için geçerli değildir.

Bir fragman sınıfının içinde:

 
view = getView().getRootView().getWindowToken();

Parametre olarak fragment numaralı parçaya verilen:

 
view = fragment.getView().getRootView().getWindowToken();

İçerik gövdesinden başlayarak:

 
view = findViewById(android.R.id.content).getRootView().getWindowToken();

GÜNCELLEME 2: Uygulamayı arka plandan açarsanız klavyeyi tekrar göstermemek için netlemeyi temizleyin

Bu satırı, yöntemin sonuna ekleyin:

view.clearFocus();

    
1599
2018-11-27 08: 34: 00Z
  1. softInputMode'u değiştirmeniz gerektiğini düşünmüyorum. Bu AndroidManifest ayarlarını geçersiz kılar.
    2014-01-09 07: 26: 21Z
  2. @ AlexanderFarber evet, genellikle EditText, ancak View yalnızca bir pencere belirtecini türetmek için kullanıldığından, görünür bir TextView'un çalışacağına (örn. View) inanıyorum Klavyeyi gizlemek için Ayrıca, View'un Activity yerine Fragment sunucusundan gelmesi gerektiğine inanıyorum.
    2015-04-20 18: 30: 54Z
  3. @ rmirabelle Fragment'da, getActivity().getWindow().getDecorView()'u kullanabileceğiniz anlaşılıyor
    2015-06-11 16: 09: 10Z
  4. google gerçekten bu Keyboard.hide(); yardımcı programını sağlamalıdır
    2016-10-18 09: 47: 38Z
  5. thx !! bana yardım etti ve bu robotta çok kavisli bulduğum ilk şey değil, çok fazla hata ve biri için çalışan ve diğer için işe yaramaz şeyler ... her biri farklı davranışlarıyla kontrol ediyor, her şey ortak değil. bu, çalışmayı ve geliştirmeyi zorlaştırır ...
    2017-09-05 12: 02: 26Z

Android’i InputMethodManager sanal klavyeyi gizlemeye zorlayabilirsiniz a>, adlı bir numarayı arayın hideSoftInputFromWindow , odaklanmış görüşünüzü içeren pencerenin belirtecini aktarın.

 
// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

Bu, klavyeyi her durumda gizlenmeye zorlar. Bazı durumlarda, yalnızca klavyeyi gizlemek için kullanıcı açıkça görünmeye zorlamadığında (menüyü basılı tutarak) ikinci bir parametre olarak InputMethodManager.HIDE_IMPLICIT_ONLY'da geçmek isteyebilirsiniz.

Not: Bunu Kotlin'de yapmak istiyorsanız, şunu kullanın:  context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

Kotlin Sözdizimi

 
// Check if no view has focus:
 val view = this.currentFocus
 view?.let { v ->
  val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager 
  imm?.let { it.hideSoftInputFromWindow(v.windowToken, 0) }
 }
    
4318
2019-02-28 07: 59: 57Z
  1. Teşekkürler, eğer ikinci parametre olarak 0 kullanıyorsanız harika çalışıyor gibi görünüyor. Ancak InputMethodManager.HIDE_IMPLICIT_ONLY kullanırsam klavye asla gizlenmez (menüyü basılı tutmama rağmen). Herhangi bir ipucu?
    2010-06-23 22: 50: 24Z
  2. Harika. Sadece açıklığa kavuşturmak için, bu yalnızca varsa reddeder, ancak açılmasını engellemez değil mi?
    2011-02-16 19: 48: 24Z
  3. softInput'u gizlemeden önce editText.clearFocus () öğesini çağırmak yararlı olabilir
    2013-10-01 19: 51: 31Z
  4. editText.clearFocus()'u sonra InputMethodManager.HIDE_IMPLICIT_ONLY'u aramak bile 4.1'da çalışır
    2013-11-30 12: 57: 56Z
  5. 4.4 /htc'de benim için neyin işe yaradığı, şu anda odaklanan görünümün kesinlikle olanı, View focused = getCurrentFocus() ve sonra focused.clearFocus()'u bulmak için inputMethodManager.hideSoftInputFromWindow(focused.getWindowToken(), 0) yürütüyordu ( açık bayraklı).
    2015-08-13 00: 12: 17Z

Yazılım klavyesini gizlemek için de yararlıdır:

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

Bu, kullanıcı editText Görünümüne gerçekten değene kadar yazılım klavyesini bastırmak için kullanılabilir.

    
775
2014-11-24 16: 07: 40Z
  1. Aynı efekti android ekleyerek de elde edebilirsiniz: windowSoftInputMode = "stateHidden" tezahüründeki etkinliğinizde.
    2012-08-10 16: 09: 11Z
  2. Bunu API Seviye 9'daki bir Fragmentte (sahip olma aktivitesine atıfta bulunarak) denedim ve maalesef çalışmadı. OnResume ve onActivityCreated öğelerinde çağrılmaya çalışıldı - etkisiz.
    2013-03-10 16: 07: 44Z
  3. Bir iletişim kutusunda çalışıyorum ve bu işe yaradı. Android 3.2 kullanıyorum. OnCreateDialog (Bundle) yöntemine koydum. OnCreate yönteminde çalışmadı. İletişim kutusu iletişim kutusu = super.onCreateDialog (savedInstanceState); dialog.getWindow (). setSoftInputMode (WindowManager.LayoutParams. SOFT_INPUT_STATE_ALWAYS_HIDDEN); Sonuçta EditTexts ile görünümüm klavyesiz görünmesidir. Kullanıcı bir düzenleme metnine dokunduğunda, klavye belirir.
    2013-07-03 05: 12: 55Z
  4. Bu, odak hala bir EditText'teyken çalışmaz (bir düğmeye dokunduktan sonra gibi). Bunun için Reto'nun çözümünü kullanın.
    2013-07-09 06: 48: 43Z
  5. Liste ayarları geçersiz kılma neden kötü bir fikir? Bunu bir parçasından arıyorum. Bir parça için geçerli bir ayar yok ...
    2014-04-24 00: 48: 59Z

Klavyeyi gizlemek için bir çözüm daha buldum:

 
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);

Burada HIDE_IMPLICIT_ONLY’da showFlag ve 0’da Yumuşak Klavyeyi zorla kapatır.

    
326
2016-06-27 15: 26: 34Z
  1. Showflags parametresinde bir gizleme bayrağı kullanıyorsunuz. Bu sadece işe yarar çünkü sabitler aynı tamsayıları kullanır. Doğru bayrakları kullanarak örnek
    2013-03-23 ​​14: 35: 12Z
  2. Android 4.0'da test edildi, bu çözümü sevdim, çünkü birden fazla düzenleme metnine, o etkinlik üzerinde odaklanabilecek düğmelere sahibim
    2013-05-16 15: 04: 21Z
  3. Bu, klavyeyi gizliyse neden gösteriyor? :)
    2013-06-08 19: 33: 31Z
  4. @ Mark: Çünkü yöntem "hideSoftInput" değil "toggleSoftInput" olarak adlandırılır çünkü :)
    2013-08-30 02: 08: 40Z
  5. Bu çözüm, gizlendiğinde klavyeyi gösterir. Doğru değil
    2016-05-14 20: 14: 25Z

Meier'in çözümü de benim için çalışıyor. Benim durumumda, Uygulamamın en üst seviyesi bir tabHost ve sekmeleri değiştirirken anahtar kelimeyi gizlemek istiyorum - Pencere göstergesini tab Görünümünden buluyorum.

 hiddenFlag     
142
2014-11-24 15: 54: 56Z
  1. Bunu SearchView ile de çalıştım. Cevabım için aşağıya bakın. Teşekkürler mckoss!
    2014-07-06 23: 43: 58Z

Lütfen bunu

tabHost.setOnTabChangedListener(new OnTabChangeListener() {
    public void onTabChanged(String tabId) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(tabHost.getApplicationWindowToken(), 0);
    }
}
’da aşağıdaki kodu deneyin.  onCreate()     
130
2018-05-24 18: 15: 06Z
  1. Bu yöntem, code.google.com/p/android/issues/detail?id=7115 ... Yukarıda listelenen hideSoftInputFromWindow yöntemi denediğimde işe yaramadı, ancak editView.setInputType (0) çalıştı.
    2010-04-17 05: 50: 54Z
  2. Bu yöntem Javadoc (okunaklı değil) başına okunaklı olsa da yöntemi
    EditText edtView=(EditText)findViewById(R.id.editTextConvertValue);
    edtView.setInputType(0);
    
    olarak yeniden yazardım
    2010-10-11 20: 49: 27Z
  3. bu işe yarıyor, ancak android'i gizliyor: ipucu. Android 1.5 kullanıyorum
    2012-01-11 10: 32: 12Z
  4. @ Bostone Bu SearchView için çalışmıyor
    2014-06-20 09: 11: 03Z
  5. bu, klavyeyi bir iletişim kutusundan kapatmanız gerektiğinde, bir örnek veya herhangi bir şey almanıza gerek olmadığı ve bunu kullanıcı tarafından düzenlenmiş tüm metinlere atayabileceğiniz zamanlar için idealdir. iletişim kutusunu kapatan bir düğmeye basar
    2014-12-26 21: 38: 05Z

Güncelleme: Neden bu çözüm artık işe yaramadı bilmiyorum (Ben sadece Android 23 üzerinde test). Lütfen bunun yerine Saurabh Pareek çözümünü kullanın. İşte burada:

 editView.setInputType(InputType.TYPE_NULL);

Eski cevap:

 
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
//Hide:
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
//Show
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
    
122
2017-05-23 12: 10: 54Z
  1. Bu kodu nereye yerleştirmeliyim? GetWindow (). SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) yapıştırmayı denedim; onCreate (içinde) ancak klavye hiçbir zaman gizlenmez
    2013-07-15 18: 20: 10Z
  2. çalışmıyor, radioGroup.setOnCheckedChangeListener, API 23'te test edildi
    2015-08-06 16: 50: 14Z
  3. Daha yakından bakarsanız InputMethodManager.HIDE_IMPLICIT_ONLY ve InputMethodManager.SHOW_IMPLICIT "1" olan aynı değere sahiptir, bu nedenle bu aramalar arasında bir fark yoktur. = &Gt; çalışmıyor
    2016-08-18 10: 43: 08Z
  4. eğer imm.toggleSoftInput (InputMethodManager.HIDE_IMPLICIT_ONLY, 0); daha sonra klavye ekranda görünecektir :) En iyi uygulama: github.com/ravindu1024/android-keyboardlistener Android SDK'da Utanç Verme
    2016-11-29 10: 15: 53Z
  5. //Show soft-keyboard:
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    //hide keyboard :
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    
    - çünkü Android , her şey değişebilir, belki de kısmen kötü tasarım ... Dikkatsizce yazıyoruz, sonra herkese çarpıyoruz ve her şeyi yeniden yazıyoruz.
    2016-12-16 04: 22: 07Z
 I don't know why this solution is not work any more     
79
2018-11-28 10: 55: 30Z
  1. Bu benim için çalıştı! Fakat neden input.setInputType (0) yazdınız? Bu kod satırına sahip olduğumda EditTextView ile etkileşime giremedim (Kaldırdığımda çalıştı).
    2014-04-10 13: 52: 53Z
  2. Muhtemelen
    protected void hideSoftKeyboard(EditText input) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(input.getWindowToken(), 0);    
    }
    
    .
    2018-09-19 14: 28: 11Z
  3. Bu koddan input.getContext().getSystemService(Context.INPUT_METHOD_SERVICE)'u kaldırdım. Klavye davranışını ve input.setInputType(0); için inputType'u değiştirdi.
    2018-11-28 10: 56: 21Z

Buradaki diğer tüm cevaplar sizin için istediğiniz şekilde işe yaramazsa, klavyeyi manuel olarak kontrol etmenin başka bir yolu vardır.

EditText’un özelliklerinden bazılarını yönetecek bir işlev oluşturun:

 EditText

Ardından, klavyeyi açtığınız /kapattığınız

public void setEditTextFocus(boolean isFocused) {
    searchEditText.setCursorVisible(isFocused);
    searchEditText.setFocusable(isFocused);
    searchEditText.setFocusableInTouchMode(isFocused);

    if (isFocused) {
        searchEditText.requestFocus();
    }
}
’un Odaklandığından emin olun:  EditText

Şimdi, klavyeyi ne zaman elle açmak isterseniz arayın:

 
searchEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (v == searchEditText) {
            if (hasFocus) {
                // Open keyboard
                ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(searchEditText, InputMethodManager.SHOW_FORCED);
            } else {
                // Close keyboard
                ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
            }
        }
    }
});

Aramayı kapatmak için:

 
setEditTextFocus(true);
    
66
2014-11-24 15: 55: 42Z
  1. + 1 - Kapalı klavyeyle bir etkinlik başlatmak istiyorsanız, bu çözümü kullanın ve setEditTextFocus'u (true) ayarlayan bir onclicklistener ekleyin. Charme gibi çalışıyor!
    2012-06-06 14: 36: 15Z
  2. İkinci kod bloğunun 7. ve 10. satırlarında 'Sembol içeriğini çözemiyorum' ifadesini aldım.
    2017-02-28 17: 02: 15Z
  3. Bunun yerine getContext () kullanın
    2017-02-28 17: 04: 15Z

Saurabh Pareek şu ana kadarki en iyi cevaba sahip.

Yine de doğru bayrakları kullanabilir.

 
setEditTextFocus(false);

Gerçek kullanım örneği

 
/* hide keyboard */
((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
    .toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

/* show keyboard */
((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
    .toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
    
57
2017-05-23 11: 55: 19Z
  1. 2.1'de klavye yine de açılır, sonra gizlenir. İyi değil.
    2013-03-26 17: 27: 54Z
  2. Bu, en son sürüm için en verimli olanıdır. Birinin eski versiyonlar için her zaman ince ayarlaması gerekir. Özellikle v3'ten önce.
    2013-04-25 14: 34: 11Z
  3. Fragmanlar ile getSystemService () yöntemi çözülemiyor!
    2013-07-17 06: 21: 51Z
  4. @ Mazen: use
    /* click button */
    public void onClick(View view) {      
      /* hide keyboard */
      ((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
          .toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
    
      /* start loader to check parameters ... */
    }
    
    /* loader finished */
    public void onLoadFinished(Loader<Object> loader, Object data) {
        /* parameters not valid ... */
    
        /* show keyboard */
        ((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
            .toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
    
        /* parameters valid ... */
    }
    
    2013-07-29 10: 56: 31Z
  5. Hayır. Samsung Tab, Android 5.0 sürümünde, yukarıdaki "klavyeyi gizle" adı verilen kod yumuşak klavyeyi değiştirecek - zaten gizlenmişse gösterecektir. Bu işlevin adında TOGGLE olmasının bir nedeni var.
    2015-11-13 03: 22: 20Z

bu kadar çok araştırırken, burada benim için işe yarayan bir cevap buldum

 fragment.getActivity().getSystemService();     
52
2015-04-24 21: 09: 51Z

Kısa cevap

// Show soft-keyboard:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

// Hide soft-keyboard:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
dinleyicinizde OnClick’un onEditorAction’unu EditText’la arayın  IME_ACTION_DONE

Detaylandırma

Bu yöntemin Android tasarım deseniyle daha iyi, daha basit ve daha uyumlu olduğunu düşünüyorum. Yukarıdaki basit örnekte (ve genellikle yaygın vakaların çoğunda) odaklanmış /odaklanmış bir

button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        someEditText.onEditorAction(EditorInfo.IME_ACTION_DONE)
    }
});
'unuz olur ve klavyeyi ilk başta çağıran kişi de buydu (kesinlikle onu çağırabilir. birçok yaygın senaryo). Aynı şekilde, genellikle bir EditText tarafından yapılabilen, klavyeyi serbest bırakmak için olmalıdır . Sadece ImeAction ile EditText'un nasıl davrandığını görün, aynı davranışı aynı yöntemle elde etmek istediğinizde.

Bunu kontrol edin ilgili cevabı

    
49
2017-05-23 12: 10: 54Z
  1. Cevap budur. Çapraz sürüm çalışan tek yöntem. Bu soruyu postalamak için bu soruya geri döndüm çünkü başka kimsenin bilmediğini düşünmedim
    2015-02-05 07: 23: 10Z
  2. Bu doğru cevap olmalı. Gerçekten orada olması gerektiğinde Android'i klavyeyi gizlemek yerine kandırmak yerine, kullanıcının klavyede "YAPILDI" düğmesini tıklatmış gibi aynı ImeAction [aptalca ad, itiraf et] tetiğini tetiklediğini kullanıcı tarafından yapıldığını söyleriz . Bu şekilde, kullanıcı klavyedeki girişi onaylarsa veya UI düğmesine basarsa farketmez.
    2015-05-08 16: 03: 12Z

Bu çalışmalı:

 android:imeOptions="actionDone"     
44
2016-07-15 14: 51: 17Z
  1. Klavye gizlenmiş olsa bile kısmen çalıştı "isActive ()" false döndürür!
    2013-10-04 18: 27: 03Z
  2. Tabii ki yapması gerekiyor. Ya da belki seni anlamıyorum. Her neyse, sınıfı ne zaman göstermesi gerektiği ve ne zaman göstermemesi gerektiği konusunda daha fazla kontrol sahibi olmak için
    public class KeyBoard {
    
        public static void show(Activity activity){
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); // show
        }
    
        public static void hide(Activity activity){
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); // hide
        }
    
        public static void toggle(Activity activity){
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
            if (imm.isActive()){
                hide(activity); 
            } else {
                show(activity); 
            }
        }
    }
    
    KeyBoard.toggle(activity);
    
    ve hide() yöntemleriyle destekleyebilirsiniz. Benim için çalışıyor, ben de yaptım :) Örneği düzenleyeceğim
    2013-10-05 07: 55: 39Z
  3. @ YoushaAleayoub evet olacak. show()
    2016-07-15 14: 46: 54Z
  4. @ slinden77, lol, Cevabınız hakkında konuşuyorum ... yorumladığınızdan değil. Böylece bu cevap hala WONT işe yaramaz.
    2016-07-16 16: 55: 06Z
  5. @ YoushaAleayoub uhm evet olacak. Asıl soru parçalardan söz etmiyor, parçalardan söz eden sizsiniz. Yani cevabım tamamen geçerli. Parçalarla kullanmak için, bir yorum yapıldığı gibi yöntemi KeyBoard.toggle(fragment.getActivity())'dan farklı olarak çağırın. Lütfen yöntemleri nasıl kullanacağınızı öğrenin ve sonra geri dönün. İnsanları saçma cevaplarınla ​​karıştırıyorsun
    2016-07-17 16: 48: 09Z

Bir Hex numarası girmek için özel bir klavye kullanıyorum, böylece IMM klavyesini gösteremiyorum ...

v3.2.4_r1 sürümünde Fragment, bir TextView odaklandığında klavyeyi göstermemek ya da klavyeyi göstermemek için eklenmiştir, ancak yine de gizlendiğinden yansıma kullanılmalıdır:

 setSoftInputShownOnFocus(boolean show)

Eski sürümler için,

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    try {
        Method method = TextView.class.getMethod("setSoftInputShownOnFocus", boolean.class);
        method.invoke(mEditText, false);
    } catch (Exception e) {
        // Fallback to the second method
    }
}
ile kök görünümüme göre eklenmiş OnGlobalLayoutListener ile çok iyi sonuçlar elde ettim (ancak mükemmel olmaktan uzak) ve ardından klavyenin böyle gösterilip gösterilmediğini kontrol ettik:  ViewTreeObserver

Bu son çözüm, bir saniye boyunca klavyeyi gösterebilir ve seçim tutamaçlarıyla karışabilir.

Klavyede tam ekrana girdiğinde, onGlobalLayout çağrılmaz. Bunu önlemek için TextView # setImeOptions (int) veya TextView XML bildiriminde:

 
@Override
public void onGlobalLayout() {
    Configuration config = getResources().getConfiguration();

    // Dont allow the default keyboard to show up
    if (config.keyboardHidden != Configuration.KEYBOARDHIDDEN_YES) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(mRootView.getWindowToken(), 0);
    }
}

Güncelleme: Klavyeyi hiçbir zaman göstermemek için hangi iletişim kutularının kullanıldığını ve tüm sürümlerde çalıştığını öğrendim:

 
android:imeOptions="actionNone|actionUnspecified|flagNoFullscreen|flagNoExtractUi"
    
40
2012-05-28 20: 48: 33Z
  1. Teşekkürler. İki bayrak FLAG_ALT_FOCUSABLE_IM ve FLAG_ALT_FOCUSABLE_IM aslında benim durumumda yardımcı olan tek şey. Klavyemin etkinliğimde gösterilmesini istemedim - kullanıcı bir düzenleme metnini tıkladığında bile. (Kendi "tuş takımımı" yaptım).
    2012-08-13 19: 33: 04Z
  2. FLAG_ALT_FOCUSABLE_IM bayrakları sorunumu çözdü
    2013-01-25 16: 01: 49Z
  3. Harika bir çözüm, ancak, ön etkinliğiniz tam ekran değilse, klavye arkasında görünür. Ayrıca klavyenin imleç hareket yardımcısı da hala görülebilir. Ve bu skinnable değil.
    2013-03-26 17: 42: 09Z
  4. İkincisi. Tüm olası yollardan yalnızca getWindow (). SetFlags () yöntemi çalışır, en azından Android 5.1 üzerinde çalışır. SetSoftInputShownOnFocus () öğesinin şimdi setShowSoftInputOnFocus () olduğunu ve artık gizlenmediğini, ancak çalışmadığını, en azından kullanıcı alana dokunduğunu unutmayın.
    2015-12-20 19: 04: 34Z
  5. "Güncellemeniz" benim için çalışan tek çözümdü. En az iki saat boyunca bir çözüm arıyorum :)
    2016-08-08 19: 05: 38Z
 
getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
        WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    
31
2015-06-01 13: 36: 12Z

İki günden fazla bir süre, ipliğe gönderilen tüm çözümleri inceleyerek geçirdim ve onları bir şekilde veya başka bir şekilde eksik buldum. Benim tam ihtiyacım olan bir% 100 güvenilirliğe sahip düğme, ekran klavyesini gösterir veya gizler. Klavye gizli durumdayken, kullanıcının hangi giriş alanını tıklattığına bakmaksızın yeniden görünmemesi gerekir. Görünür durumdayken, kullanıcının hangi düğmeyi tıklattığına bakmaksızın klavye kaybolmamalıdır. Bunun en son cihazlara kadar Android 2.2+ üzerinde çalışması gerekiyor.

Bunun bir çalışan uygulamasını uygulamamda görebilirsiniz temiz RPN .

Önerilen yanıtların birçoğunu farklı telefonlarda (froyo ve gingerbread aygıtları dahil) test ettikten sonra, android uygulamalarının güvenilir bir şekilde yapabileceği anlaşıldı:

  1. Klavyeyi geçici olarak gizleyin. Bir kullanıcı ne zaman tekrar görünecek yeni bir metin alanına odaklanır.
  2. Bir etkinlik başladığında klavyeyi göster ve etkinlik üzerinde, klavyenin her zaman görünür ol. Bu bayrak yalnızca bir etkinlik olduğunda başlatılıyor.
  3. Hiçbir zaman gösterilmesini veya kullanımına izin vermeyecek bir etkinliği işaretleyin. tuş takımı. Bu bayrak yalnızca bir etkinlik olduğunda başlatılıyor.

Benim için klavyeyi geçici olarak gizlemek yeterli değil. Bazı cihazlarda, yeni bir metin alanı odaklandığı anda yeniden görünecektir. Uygulamam bir sayfada birden fazla metin alanı kullandığından, yeni bir metin alanına odaklanmak gizli klavyenin tekrar açılmasını sağlar.

Maalesef listedeki 2. ve 3. maddeler yalnızca bir etkinlik başlatıldığında güvenilir çalışır. Etkinlik görünür hale geldiğinde, klavyeyi kalıcı olarak gizleyemez veya gösteremezsiniz. İşin püf noktası, kullanıcı klavye geçiş düğmesine bastığında etkinliğinizi yeniden başlatmaktır. Uygulamamda, kullanıcı geçiş klavyesi düğmesine bastığında, aşağıdaki kod çalıştırılır:

 
public void setKeyboardVisibility(boolean show) {
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if(show){
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    }else{
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),0);
    }
}

Bu, geçerli etkinliğin durumunun bir Bundle'a kaydedilmesini sağlar ve ardından klavyenin gösterilip gösterilmeyeceğini belirten bir booleden geçen etkinlik başlatılır.

onCreate yönteminde aşağıdaki kod çalıştırılır:

 
private void toggleKeyboard(){

    if(keypadPager.getVisibility() == View.VISIBLE){
        Intent i = new Intent(this, MainActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        Bundle state = new Bundle();
        onSaveInstanceState(state);
        state.putBoolean(SHOW_KEYBOARD, true);
        i.putExtras(state);

        startActivity(i);
    }
    else{
        Intent i = new Intent(this, MainActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        Bundle state = new Bundle();
        onSaveInstanceState(state);
        state.putBoolean(SHOW_KEYBOARD, false);
        i.putExtras(state);

        startActivity(i);
    }
}

Yazılım klavyesi gösterilmesi gerekiyorsa, InputMethodManager'a klavyeyi göstermesi söylenir ve pencereye yazılım girişinin her zaman görünür olmasını sağlama talimatı verilir. Yazılım klavyesinin gizlenmesi gerekiyorsa, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM ayarlanır.

Bu yaklaşım test ettiğim tüm cihazlarda güvenilir bir şekilde çalışıyor - android 2.2 çalıştıran 4 yaşındaki bir HTC telefondan 4.2.2 çalıştıran bir nexus 7'ye kadar. Bu yaklaşımın tek dezavantajı, geri düğmesini kullanırken dikkatli olmanız gerektiğidir. Uygulamamın esas olarak yalnızca bir ekranı (onun hesap makinesi olduğu) olduğundan onBackPressed'ı () geçersiz kılabilir ve cihazların ana ekranına geri dönebilirim.

    
28
2018-03-06 07: 10: 29Z
  1. ayrıntılı bir geçici çözüm hazırladı, ancak yalnızca Klavyeyi gizlemek için binlerce nesneyi yeniden oluşturmanın çok fazla olduğunu düşünüyorum. IMM'yi android için kimin tasarladığını bilmiyorum ama Windows APi gibi kokuyor. Benim düşünceme göre, iyi bir IME'nin iki yöntemi olmalı: gizle ve göster :-)
    2013-05-15 13: 43: 12Z
  2. Hepsi doğru, ancak geçici çözümümün bir avantajı var - her zaman işe yarıyor! Kullanıcı Arabiriminde hangi alanların odaklandığına bakılmaksızın, klavyeyi her zaman değiştirebilecek başka bir çözüm bulunmuyor, kullanıcının geçiş yapmak ve klavyeyi ne yapmak için ne yaptığını ve hangi android versiyonunu çalıştırdıklarını göz önünde bulundurmadan: - \
    2013-05-20 11: 35: 55Z
  3. Dostum, klavyeyi gizlemek için tamamen çaresizim. Binlerce şey denedim ve noooone çalışmaları. Fakat sizin çözümünüz benim için çok fazla, 10 parça gibi yeniden yaratmak, hizmetleri başlatmak, çok fazla WeakReferences silmek zorunda kalacağım. GC sadece 25 MB: S gibi atıyordu ... Hala yapmak için güvenilir bir yol arıyorum :(
    2013-05-20 14: 57: 45Z
  4. @ Dmitry, merhaba bir dünya değil ... tabletler için karmaşık bir uygulamadır. Aptal bir klavyeyi gizlemek için tamamen bellekten boşaltmayı reddediyorum ... Yine de burada önerilen bin çözümü birleştiren bir şey buldum :)
    2013-10-08 16: 21: 53Z

Alternatif klavyeyi herhangi bir yerden üçlü bir yerden kapatmak istiyorsanız, bunun her tarafındaki çözümüne alternatif olarak > klavyeyi açmak için kullanılan (EditText) alanına referans vermeden, ancak alan odaklanmışsa yine de yapmak istedi, bunu kullanabilirsiniz (bir Etkinlikten):

 
if(bundle.getBoolean(SHOW_KEYBOARD)){
    ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(newEquationText,0);
    getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
else{
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
            WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
}
    
25
2017-05-23 12: 10: 54Z

bu SO yanıtı sayesinde, benim durumumda gezinirken iyi sonuç veren aşağıdakileri türettim. ViewPager'ın parçaları ...

 
if (getCurrentFocus() != null) {
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
    
23
2017-05-23 12: 34: 58Z

Yukarıdaki cevaplar farklı senaryolar için işe yarar ancak Klavyeyi bir görünümün içine gizlemek ve doğru içeriği elde etmek için uğraşmak istiyorsanız şunu deneyin:

 
private void hideKeyboard() {   
    // Check if no view has focus:
    View view = this.getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

private void showKeyboard() {   
    // Check if no view has focus:
    View view = this.getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
    }
}

ve içeriğin yapıcıdan getirilmesi için :)

 
setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        hideSoftKeyBoardOnTabClicked(v);
    }
}

private void hideSoftKeyBoardOnTabClicked(View v) {
    if (v != null && context != null) {
        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}
    
20
2015-04-24 21: 10: 37Z

Yazılım klavyesini bir ünite veya fonksiyonel test sırasında kapatmak istiyorsanız, bunu testinizden "geri" düğmesini tıklatarak yapabilirsiniz:

 
public View/RelativeLayout/so and so (Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    this.context = context;
    init();
}

Yukarıdaki "geri düğmesini" tırnak içine aldım, çünkü yukarıdaki söz konusu Faaliyet için

// Close the soft keyboard from a Test
getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
’u tetiklemiyor. Sadece klavyeyi kapatır.

Devam etmeden önce biraz duraklattığınızdan emin olun, çünkü geri düğmesini kapatmak biraz zaman alıyor, bu nedenle daha sonra Görünümler vb. tıklamalar kısa bir duraklamadan sonraya kadar kaydedilmeyecek (1 saniye yeterince uzun ime).

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

Android için Mono'da (AKA MonoDroid) nasıl yaptığınız:

 onBackPressed()     
15
2012-05-15 01: 36: 10Z
  1. Metin parçasında
    InputMethodManager imm = GetSystemService (Context.InputMethodService) as InputMethodManager;
    if (imm != null)
        imm.HideSoftInputFromWindow (searchbox.WindowToken , 0);
    
    nedir?
    2012-11-26 19: 14: 36Z
  2. @ PCoder düzenleme metnini düşünüyorum
    2016-10-24 13: 16: 51Z

Bu tuhaf klavye davranışları için benim için işe yaradı

 searchbox     
15
2015-04-24 21: 11: 16Z
  1. Bundan önce 10 cevap denediğimi düşünüyorum. Umuttan vazgeçmiştim. Teşekkürler dostum.
    2016-01-20 20: 33: 14Z
  2. mRootView nedir?
    2018-11-28 19: 49: 54Z

Manifest dosyasındaki etkinliğinize

private boolean isKeyboardVisible() {
    Rect r = new Rect();
    //r will be populated with the coordinates of your view that area still visible.
    mRootView.getWindowVisibleDisplayFrame(r);

    int heightDiff = mRootView.getRootView().getHeight() - (r.bottom - r.top);
    return heightDiff > 100; // if more than 100 pixels, its probably a keyboard...
}

protected void showKeyboard() {
    if (isKeyboardVisible())
        return;
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if (getCurrentFocus() == null) {
        inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    } else {
        View view = getCurrentFocus();
        inputMethodManager.showSoftInput(view, InputMethodManager.SHOW_FORCED);
    }
}

protected void hideKeyboard() {
    if (!isKeyboardVisible())
        return;
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    View view = getCurrentFocus();
    if (view == null) {
        if (inputMethodManager.isAcceptingText())
            inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);
    } else {
        if (view instanceof EditText)
            ((EditText) view).setText(((EditText) view).getText().toString()); // reset edit text bug on some keyboards bug
        inputMethodManager.hideSoftInputFromInputMethod(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}
ekleyin. Örnek:  android:windowSoftInputMode="stateHidden"     
14
2016-02-04 12: 21: 40Z

bunu kullan

 
<activity
            android:name=".ui.activity.MainActivity"
            android:label="@string/mainactivity"
            android:windowSoftInputMode="stateHidden"/>
    
12
2013-08-09 13: 42: 00Z

Benim durumum için, eylem çubuğundaki bir SearchView kullanıyordum. Bir kullanıcı bir arama yaptıktan sonra, klavye tekrar açılır.

InputMethodManager'ı kullanmak klavyeyi kapatmadı. Odağı temizlemek ve arama görünümünün odağını yanlış olarak ayarlamak zorunda kaldım:

 
this.getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    
12
2015-04-24 21: 10: 48Z
  1. Çok zekice. Kullanıcı başka bir arama yapmak istiyorsa, tekrar aramanız yeterlidir.
    2013-03-23 ​​14: 48: 56Z
  2. SearchView, Android API sayfalarında
    mSearchView.clearFocus();
    mSearchView.setFocusable(false);
    
    'a sahip değil, bu yüzden bu benim için işe yaramadı, ancak başka bir çözüm oldu (aşağıdaki cevabımı görün).
    2014-07-06 23: 46: 34Z
  3. @ Noni A, stackoverflow.com/questions/7409288/…
    2016-04-18 21: 50: 37Z

Etkinliğinizde bu optimize edilmiş kodu kullanın:

 clearFocus()     
12
2015-04-24 21: 11: 54Z

Bu cevapların neredeyse hepsini denedim, özellikle samsung galaxy s5 ile ilgili bazı rastgele sorunlar yaşadım.

Sonunda ortaya çıkan şey, gösteriyi gizlemeye ve gizlemeye zorluyor, ve mükemmel çalışıyor:

 
if (this.getCurrentFocus() != null) {
    InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
    
12
2015-05-15 12: 40: 06Z

Bazı durumlarda, bu yöntemler diğerleri hariç işe yarayabilir. Bu günümü kurtarıyor :)

 
/**
 * Force show softKeyboard.
 */
public static void forceShow(@NonNull Context context) {
    InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}

/**
 * Force hide softKeyboard.
 */
public static void forceHide(@NonNull Activity activity, @NonNull EditText editText) {
    if (activity.getCurrentFocus() == null || !(activity.getCurrentFocus() instanceof EditText)) {
        editText.requestFocus();
    }
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
    
12
2016-02-04 11: 46: 12Z

Basit ve kullanımı kolay bir yöntemdir; klavyeyi gizlemek için hideKeyboardFrom (YourActivity.this); adresini çağırmanız yeterlidir

 
public static void hideSoftKeyboard(Activity activity) {
    if (activity != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (activity.getCurrentFocus() != null && inputManager != null) {
            inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
            inputManager.hideSoftInputFromInputMethod(activity.getCurrentFocus().getWindowToken(), 0);
        }
    }
}

public static void hideSoftKeyboard(View view) {
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputManager != null) {
            inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
}
    
12
2017-02-21 06: 52: 20Z

Açık Klavye İçin:

 
/**
 * This method is used to hide keyboard
 * @param activity
 */
public static void hideKeyboardFrom(Activity activity) {
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}

Klavyeyi Kapat /Gizle için:

 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(edtView, InputMethodManager.SHOW_IMPLICIT);
    
11
2015-02-05 12: 39: 18Z
  1. teşekkürler benim için işe yarıyor
    2017-07-14 13: 46: 00Z
 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.hideSoftInputFromWindow(edtView.getWindowToken(), 0);
kaynak yerleştirildi İşte