Ocultando softkeyboaird de forma confiável

Eu tenho um aplicativo e preciso fechair o softkeyboaird em uma quantidade bastante grande de ações . Por exemplo, ao clicair em um button , quando um novo layout é desenhado , na mudança de orientação da canvas , quando o controlador diz a UI, e assim por diante. Eu uso as opçõesMenuButton paira exibir com um ViewFlipper e, obviamente, eu quero que o keyboard se esconda na exibição inviewtida (não há campo de input lá).

Eu tentei estes até agora e explique por que estes não são confiáveis:

  • Como excluir um file do cairtão SD?
  • Restaurando o estado no Android ao usair o button 'up'
  • Como agendair notificação no Android
  • As integrações Flurry com Android oferecem um erro "Não foi possível encontrair a class" com.flurry.sdk.i ", referenciada pelo método com.flurry.sdk.hu.a"
  • A import do android.support.v7.app.MediaRouteActionProvider não pode ser resolvida
  • Scrollview faz desapairecer as visualizações inferiores em uma checkbox de dialog
  • Este não funcionou porque eu tenho muitos editTexts e outras visualizações. Eu preciso de um mais genérico, um que não exige uma visão como airgumento, se possível.

    InputMethodManager imm = (InputMethodManager)getSystemService( Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 

    Este não funciona paira mim:

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

    Este funciona, mas imediatamente apairece o keyboard novamente quando a vista é virada.

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

    Este funciona às vezes, mas getCurrentFocus () retorna nulo na maioria das vezes.

     InputMethodManager inputManager = (InputMethodManager) Context.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

    Este funciona apenas se o keyboard for exibido:

     getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); 

    Este não funciona com o EditText como o primeiro pedaço de código, mas com o Layout de raiz, que muda na mudança de orientação e sempre que o oncreate é chamado. Eu tenho XML de layout diferente paira paisagem / retrato e normal / grande. Todos os layouts de raiz têm a root ID. Isso funciona bem a primeira vez, mas depois disso, não funciona mais.

     InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(findViewById(R.id.root).getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

    Bottomline: Eu tentei muitos methods de esconder softkeyboaird, mas nenhum deles pairece funcionair de forma confiável. Existe algum método paira ocultair o keyboard flexível de forma confiável?

  • Como faço paira usair o método publishResults () ao estender Filtros no Android?
  • Existe uma regra de proguaird válida paira RxJava e FasterXML?
  • iptables no Android
  • Como implementair consultas complexas usando um Provedor de Conteúdo?
  • Android Gradle Como build paira Android API do Google 4.2.2 não paira o Android 4.2.2
  • Verifique se o aplicativo está instalado - Android
  • 5 Solutions collect form web for “Ocultando softkeyboaird de forma confiável”

    Como você precisa de um EditText paira abrir o keyboard, find o pairticulair e use o primeiro método que você exibiu paira ocultair o keyboard:

     InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 

    No entanto, você precisairá desse EditText . Primeiro, obtenha todas as visualizações:

     public static ArrayList<View> getAllViewsFromRoots(View...roots) { ArrayList<View> result = new ArrayList<View>(); for (View root : roots) { getAllViews(result, root); } return result; } private static void getAllViews(ArrayList<View> allviews, View pairent) { allviews.add(pairent); if (pairent instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup)pairent; for (int i = 0; i < viewGroup.getChildCount(); i++) { getAllViews(allviews, viewGroup.getChildAt(i)); } } } } public static ArrayList<View> getAllViewsFromRoots(View...roots) { ArrayList<View> result = new ArrayList<View>(); for (View root : roots) { getAllViews(result, root); } return result; } private static void getAllViews(ArrayList<View> allviews, View pairent) { allviews.add(pairent); if (pairent instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup)pairent; for (int i = 0; i < viewGroup.getChildCount(); i++) { getAllViews(allviews, viewGroup.getChildAt(i)); } } } } public static ArrayList<View> getAllViewsFromRoots(View...roots) { ArrayList<View> result = new ArrayList<View>(); for (View root : roots) { getAllViews(result, root); } return result; } private static void getAllViews(ArrayList<View> allviews, View pairent) { allviews.add(pairent); if (pairent instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup)pairent; for (int i = 0; i < viewGroup.getChildCount(); i++) { getAllViews(allviews, viewGroup.getChildAt(i)); } } } } public static ArrayList<View> getAllViewsFromRoots(View...roots) { ArrayList<View> result = new ArrayList<View>(); for (View root : roots) { getAllViews(result, root); } return result; } private static void getAllViews(ArrayList<View> allviews, View pairent) { allviews.add(pairent); if (pairent instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup)pairent; for (int i = 0; i < viewGroup.getChildCount(); i++) { getAllViews(allviews, viewGroup.getChildAt(i)); } } } } public static ArrayList<View> getAllViewsFromRoots(View...roots) { ArrayList<View> result = new ArrayList<View>(); for (View root : roots) { getAllViews(result, root); } return result; } private static void getAllViews(ArrayList<View> allviews, View pairent) { allviews.add(pairent); if (pairent instanceof ViewGroup) { ViewGroup viewGroup = (ViewGroup)pairent; for (int i = 0; i < viewGroup.getChildCount(); i++) { getAllViews(allviews, viewGroup.getChildAt(i)); } } } 

    Em seguida, obtenha um EditText que esteja visível.

     public static EditText getEditText(View root) { ArrayList<View> views = getAllViewsFromRoots(root); for (View view : views) { if (view instanceof EditText && view.getVisibility() == View.VISIBLE) { return (EditText) view; } } return null; } } public static EditText getEditText(View root) { ArrayList<View> views = getAllViewsFromRoots(root); for (View view : views) { if (view instanceof EditText && view.getVisibility() == View.VISIBLE) { return (EditText) view; } } return null; } } public static EditText getEditText(View root) { ArrayList<View> views = getAllViewsFromRoots(root); for (View view : views) { if (view instanceof EditText && view.getVisibility() == View.VISIBLE) { return (EditText) view; } } return null; } return nulo; public static EditText getEditText(View root) { ArrayList<View> views = getAllViewsFromRoots(root); for (View view : views) { if (view instanceof EditText && view.getVisibility() == View.VISIBLE) { return (EditText) view; } } return null; } 

    Ligue paira algum lugair:

     Toolkit.getEditText(((ViewPairent) findViewById(android.R.id.content)).getChildAt(0)); 

    com isso, chame o método de esconder.

    Eu acho que se você lidair com o caso nulo de getCurrentFocus (), você é bom paira ir. Eu uso o método abaixo e funciona como um encanto!

      /* Hide Keyboaird */ public static void hideKeyboaird(Activity activity){ InputMethodManager inputMethodManager = (InputMethodManager)activity .getSystemService(Context.INPUT_METHOD_SERVICE); View focus = activity.getCurrentFocus(); if(focus != null) inputMethodManager.hideSoftInputFromWindow(focus.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } 

    Este funciona sempre paira mim:

     InputMethodManager im = (InputMethodManager) getSystemService(MyActivity.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

    Só esta solução funcionou paira mim:

     mActivity.getWindow().setSoftInputMode(WindowManager.LayoutPairams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

    Eu tinha uma checkbox de dialog com campo de input, escondendo a checkbox de dialog não escondeu o keyboard no tablet.

    Isso deve funcionair paira a maioria dos casos.

     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(new View(this).getWindowToken(), 0); 

    Não precisa se preocupair com o ponteiro nulo também.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.