2012-02-03 16 views
5

Uso ViewPager con 3 fragmentos. El primero tiene solo texto. El segundo, un campo de entrada. el tercero, solo texto.Android ViewPager muestra el teclado virtual en el lugar equivocado

Cuando se inicializa ViewPager, se muestra el teclado virtual, porque el foco se establece como el campo de entrada. Si cambio el orden del fragmento, no se muestra el teclado virtual.

¿Cómo puedo controlar el teclado focus et soft con ViewPager?

Saludos

+0

Quizás pueda forzar a ocultar el teclado suave. Más detalles aquí: http://stackoverflow.com/questions/1109022/how-to-close-hide-the-android-soft-keyboard –

Respuesta

1

estoy seguro de que hay una mejor manera de hacer esto, pero yo estaba teniendo el mismo problema y que tiene a su alrededor mediante el establecimiento de los padres View a enfocable. De esta manera, lo que está causando el teclado en pantalla de aparecer no recibirán atención cuando pase entre las páginas ...

<!-- Dummy item to prevent your View from receiving focus --> 
<LinearLayout 
    ... 
    android:focusable="true" 
    android:focusableInTouchMode="true" /> 

    <!-- The view(s) that are causing the keyboard to pop up each time you swipe --> 
    <EditText ... /> 

</LinearLayout> 
+0

Lamentablemente no oculta el teclado cuando se vuelve a un fragmento sin edittexts. – Timmmm

5

La mejor solución que he encontrado hasta ahora es utilizar android:windowSoftInputMode="stateHidden" en el manifiesto de su actividad, y luego agrega esto a tu actividad.

@Override 
public void onPageScrollStateChanged(int state) 
{ 
    if (state == ViewPager.SCROLL_STATE_IDLE) 
    { 
     if (mViewPager.getCurrentItem() == 0) 
     { 
      // Hide the keyboard. 
      ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)) 
       .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0); 
     } 
    } 
} 

yo no uso onPageSelected() porque los tornillos de animación ocultar-teclado con la animación de deslizar. Y no usé el truco android:focusable porque el teclado no está oculto cuando vuelves a un fragmento sin entrada. Aunque supongo que podrías combinar eso con el código anterior.

0

Gracias a todos, Timmmm fue muy útil. Finalmente envolví todo y obtuve una solución completa de ocultación de teclado suave para deslizar las pestañas. Tengo 4 pestañas con EditTexts en cada una y necesito ocultar el teclado al deslizar. añadí esta a disposición fragmento:

<!--Fixes keboard pop-up--> 
<LinearLayout 
    android:layout_width="0dp" 
    android:layout_height="0dp" 
    android:background="@android:color/transparent" 
    android:focusable="true" 
    android:focusableInTouchMode="true"> 
</LinearLayout> 

que se añadieron al Código de actividad (notar una pequeña diferencia con la respuesta de un Timmmm: No tengo

mViewPager.getCurrentItem() == 0 

aquí, porque tengo que ocultar teclado para todas las vistas:

// When swiping between different sections, select the corresponding 
    // tab. We can also use ActionBar.Tab#select() to do this if we have 
    // a reference to the Tab. 
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      if (actionBar != null) { 
       actionBar.setSelectedNavigationItem(position); 
      } 
     } 
     @Override 
     public void onPageScrollStateChanged(int state) 
     { 
      if (state == ViewPager.SCROLL_STATE_IDLE) 
      { 
       // Hide the keyboard. 
       ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)) 
         .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0); 

      } 
     } 
    }); 

Y aquí es una actividad en AndroidManifest.xml:

<activity 
     android:name=".TestActivity" 
     android:label="@string/title_activity_test" 
     android:parentActivityName=".MainActivity" 
     android:windowSoftInputMode="stateHidden"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.atrinax.test.MainActivity" /> 
</activity> 
Cuestiones relacionadas