2012-04-24 11 views
5

EDITAR: Parece que no me estoy aclarando. Lo que necesito es una forma de ocultar el teclado virtual siempre que reemplace el fragmento en el que estoy. ¿Cómo hago esto?¿Cómo oculto el teclado virtual cuando cambio las pestañas?

Déjenme mantener esto simple. Tengo un cuadro EditText en Tab Fragment 1.2 que obviamente se abre en el teclado de Soft cuando se presiona. ¿Cómo lo oculto cuando se cambia la pestaña? He intentado lo siguiente en mi onTabSelected() que no parece hacer nada

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

He intentado todo momento. Ninguna de las soluciones sugeridas que he localizado hasta ahora me están ayudando de ninguna manera.

+0

añadir androide: windowSoftInputMode = "stateHidden | adjustResize"> en su Activtity –

+0

Esto no hace nada en mi solicitud. – CodePrimate

Respuesta

11

programación que podría utilizar, la captura de la vista de la actividad activa en la pantalla del dispositivo.

public final void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) { 
     View focus = getCurrentFocus(); 
     if (focus != null) { 
      hiddenKeyboard(focus); 
     } 
    } 
public final void onTabselected(Tab tab, FragmentTransaction fragmentTransaction) { 
     View focus = getCurrentFocus(); 
     if (focus != null) { 
      hiddenKeyboard(focus); 
     } 
    } 
public final void onTabUnselected(Tab tab, FragmentTransaction fragmentTransaction) { 
     View focus = getCurrentFocus(); 
     if (focus != null) { 
      hiddenKeyboard(focus); 
     } 
    } 

private void hiddenKeyboard(View v) { 
     InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
     keyboard.hideSoftInputFromWindow(v.getWindowToken(), 0); 
    } 
+0

¡Gracias! ¡Esto funcionó para mí! –

2

Esta es la forma de habilitar el teclado en pantalla

inputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 

Y esta es la forma en que se cierra cuando se cambia pestañas.

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

¿Cómo obtengo la vista editText cuando – CodePrimate

0

En el archivo XML de eliminar android:focusable="true" de todas partes.

Una cosa más es si está usando <requestfocus></requestfocus> y luego también elimine esta línea.

Pruébalo Creo que debería funcionar.

+0

no pude explicarme correctamente? El problema no es que se muestre el teclado cuando una persona enfoca la vista Editar texto. Es que el teclado suave no se esconde una vez que cambio a una pestaña diferente. – CodePrimate

+0

Creo que has configurado android: focusable = "false", esto no permitirá abrir el teclado. Creo que desea mostrar el teclado solo cuando el usuario hace clic en Editar texto, por lo que es la mejor manera de eliminar la línea superior de cada lugar que esté utilizando. –

6

Tuve el mismo problema y coloqué el siguiente código en el fragmento de la pestaña justo antes de usar el método FragmentTransaction.replace() para cambiar las pestañas. Los métodos onCreate y onCreateView en cada fragmento no se activan después de la selección de la pestaña inicial, por lo que se puede ocultar el teclado antes de llegar a la clase del fragmento específico. Usar mTabHost.getApplicationWindowToken() en lugar de editText.getWindowToken() fue de gran ayuda. Gracias a quien descubrió eso. Perdón, perdí el enlace.

InputMethodManager im = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);    
im.hideSoftInputFromWindow(mTabHost.getApplicationWindowToken(), 0); 

....... 
fm = getFragmentManager(); 
.... 

fm.beginTransaction() 
    .replace(placeholder, new someFragment(), tabId) 
    .commit(); 
2

conjunto OnPageChangeListener a ViewPager en mainActivity donde se añaden fragmentos de ViewPager

viewPager.setOnPageChangeListener(myOnPageChangeListener); 




    ViewPager.OnPageChangeListener myOnPageChangeListener = 
      new ViewPager.OnPageChangeListener() { 

      @Override 
      public void onPageScrollStateChanged(int state) { 
       //Called when the scroll state changes. 

      } 

      @Override 
      public void onPageScrolled(int position, 
             float positionOffset, int positionOffsetPixels) { 
       //This method will be invoked when the current page is scrolled, 
       //either as part of a programmatically initiated smooth scroll 
       //or a user initiated touch scroll. 

       hideKeyboard(); 
      } 

      @Override 
      public void onPageSelected(int position) { 
       //This method will be invoked when a new page becomes selected. 
       //hide keyboard when any fragment of this class has been detached 
       hideKeyboard(); 
      } 
     }; 







public void hideKeyboard() { 
    InputMethodManager inputManager = (InputMethodManager)getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); 

    // check if no view has focus: 
    View v = getCurrentFocus(); 
    if (v == null) 
     return; 

    inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 
Cuestiones relacionadas