Espacio vacío cuando vuelvo a Actividad (Soft Keyboard forzado)

Tengo un ActionView con el elemento de menú en ActionBar (con ActionBarSherlock ), Soy capaz de mostrar un EditText como un campo de búsqueda en él. Es una entrada para iniciar otra Activity con un CustomView en ActionBar que muestra el mismo diseño (no uso nada para forzar el SoftKeyboard a aparecer en esta segunda actividad, no hay ningún problema aquí). Cuando quiero hacer que el Softkey aparezca / disapears automáticamente cuando el colapso de la vista en la primera actividad, uso:

Método openKeyboard

 mImm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 

Método closeKeyboard

 mImm.hideSoftInputFromWindow(edittext.getWindowToken(), 0); 

Utilizo ActionExpandListener para hacer que el SoftKeyboard aparezca o desaparece cuando la View expande o contrae. Con estos dos métodos anteriores, tengo el resultado esperado. He encontrado esto en varias preguntas sobre SO (especialmente en Cerrar / Ocultar el teclado suave de Android y mostrar el teclado virtual para SearchView en ActionBar o forzar el teclado virtual abierto ).

Sólo para entender, cuando utilicé SHOW_IMPLICIT o SHOW_FORCED solo, no tenía efecto en versiones inferiores (como 2. +). El EditText estaba enfocado, pero el teclado no apareció (así, supongo que fue una mala cosa). En versiones recientes (como 4. + por ejemplo), fue un buen efecto y no hay problema. Entonces, forcé el teclado a aparecer con el método openKeyboard anterior.

Ahora, tengo algunos problemas con esto …
En versiones inferiores, tengo espacio "vacío" antes y después del teclado creado / destruido, puedo vivir con esto. PERO en las versiones recientes, tengo espacio "vacío" que se muestra cuando vuelvo a la primera Actividad . Y es aquí en menos de un segundo, pero suficiente para ver eso!
Para entender mejor lo que sucede, vea la siguiente imagen:

Izquierda = Segunda Actividad: presiono el botón Inicio - el teclado desaparece correctamente. Right = (volver a) Primera Actividad: mi ListView está cubierto por una pantalla "vacía" (color de fondo en mi aplicación) y desaparece.

1. Segunda Actividad: Presiono el Botón Inicio – el teclado desaparece correctamente.
2. (volver a) Primera actividad: mi ListView está cubierto por un espacio "vacío" (color de fondo en mi aplicación). Y desaparece (esta es la misma altura del SoftKeyboard, no hay duda posible!)

Supongo que es porque forcé el teclado a aparecer en mi primera actividad aunque también forcé el teclado a esconderme cuando voy el segundo, pero ¿cómo puedo resolver el espacio "vacío" cuando vuelvo a la primera actividad?


Resumen
1) Una actividad => presione el elemento en el menú> ver colapso> mostrar el teclado> teclear texto> enviarlo> ocultar teclado> iniciar actividad B.
2) Actividad B => setCustomView en la barra de acciones> mostrar el teclado sólo si el edittext está enfocado / pulsado> teclear texto> enviarlo> ocultar teclado> actualizar contenido> pulsar el botón home> volver a una actividad
3) Una pantalla de actividad => pantalla "vacía" desaparece.

Cualquier ayuda será muy apreciar.
Gracias por tu tiempo.


EDITAR
Añado mi código de mi primera clase, para ver si alguien me dice lo que estoy haciendo mal. Tal vez es mi código lo que hace que el problema.

Menú (ActionView)

 ActionBar actionBar; MenuItem itemSearchAction; EditText mSearchEdit; InputMethodManager mImm; @Override public boolean onCreateOptionsMenu(final Menu menu) { getSupportMenuInflater().inflate(R.menu.main, menu); itemSearchAction = menu.findItem(R.id.action_search); View v = (View) itemSearchAction.getActionView(); mSearchEdit = (EditText) v.findViewById(R.id.SearchEdit); itemSearchAction.setOnActionExpandListener(this); return true; } 

OnActionExpandListener

 @Override public boolean onMenuItemActionExpand(MenuItem item) { actionBar.setIcon(R.drawable.ic_app_search); // change icon mSearchEdit.requestFocus(); // set focus on edittext openKeyboard(); // the method above mSearchEdit.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_SEARCH || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { closeKeyboard(); // same method as above // new Intent() to second activity // perform with startActivity(); itemSearchAction.collapseActionView(); // collapse view return true; } return false; } }); // add a clicklistener to re-open the keyboard on lower versions mSearchEdit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openKeyboard(); } }); return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { actionBar.setIcon(R.drawable.ic_app_logo); // change icon again if(!(mSearchEdit.getText().toString().equals(""))) mSearchEdit.setText(""); // reinitial the edittext return true; } 

OnOptionsItemSelected

 // I had this verification when I make new Intent() to // a new activity, just in case (works like a charm) if(itemSearchAction.isActionViewExpanded()) itemSearchAction.collapseActionView(); 

ActionView (elemento + diseño)

 <item android:id="@+id/action_search" android:icon="@drawable/ic_app_search" android:title="@string/action_search" android:showAsAction="ifRoom|collapseActionView" android:actionLayout="@layout/search_actionview" /> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/SearchEdit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="right|bottom" android:gravity="left" android:layout_marginBottom="6dip" android:hint="@string/action_search" android:textColor="@color/white" android:textColorHint="@color/white" android:singleLine="true" android:cursorVisible="true" android:inputType="text" android:imeOptions="actionSearch|flagNoExtractUi" android:imeActionLabel="@string/action_search" android:focusable="true" android:focusableInTouchMode="true" android:background="@drawable/bt_edit_searchview_focused" > <requestFocus /> </EditText> 

ACTUALIZAR

Puedo ver un montón de problemas similares, con EditText en ActionBar que no hace que el teclado aparezca incluso el enfoque se ha establecido. He intentado esto de nuevo (incluso si ya he probado varias veces):

 /* * NOT WORKING * Sources: https://stackoverflow.com/questions/11011091/how-can-i-focus-on-a-collapsible-action-view-edittext-item-in-the-action-bar-wh * https://stackoverflow.com/a/12903527/2668136 */ int mode = WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE; getWindow().setSoftInputMode(mode); postDelayed() to show: .showSoftInput(mSearchEdit, InputMethodManager.SHOW_IMPLICIT); - 200ms (Not working on lower versions) postDelayed() to hide: .hideSoftInputFromWindow(mSearchEdit.getWindowToken(), 0); - 200ms new Runnable() on edittext => requestFocus() + showSoftInput(SHOW_IMPLICIT/FORCED/HIDE_NOT_ALWAYS/HIDE_IMPLICIT_ONLY) 

Parece conmigo, sólo SHOW_FORCED|HIDE_IMPLICIT_ONLY puede forzar el teclado a mostrar automáticamente cuando el colapso de vista. Después de esto, en todas las versiones, debo hacer un hideSoftInputFromWindow a 0 para ocultarlo.
PERO esto no exhibe el teclado incluso si el edittext se presiona, así que agregué un ClickListener para forzar el teclado para demostrar otra vez (esto sucede solamente en versiones más bajas).


UPDATE2:
Es claramente raro, cuando trato de hacer un poco de Thread como vi en muchas respuestas SO (con / sin ABS), nada sucede en versiones inferiores.
Intenté una manera diferente. He creado el nuevo hilo para tener un poco de tiempo antes de llamar a la nueva intención de ocultar el teclado. Tuve el teclado que obligó a cerrar, OK. Y luego abrí la nueva actividad, OK. Pero ahora cuando vuelva, vale la pena! El espacio "vacío" también está en las versiones inferiores cuando regreso. Hice esto:

 // close the keyboard before intent closeKeyboard(); // make the intent after 500 ms Handler handler = new Handler(); Runnable runner = new Runnable() { public void run() { // new intent with startActivity() } }; handler.postDelayed(runner, 500); // collapse the View itemSearchAction.collapseActionView(); 

Me da dolores de cabeza! No entiendo por qué en mi caso, la punta de arriba no funciona, mientras que en otras respuestas, cuando se utiliza un nuevo hilo para mostrar / ocultar el teclado, esto funciona perfectamente.

NOTA: mis pruebas estaban encendidas (emulador 🙂 GalaxyNexus, NexusS, NexusOne y (dispositivos reales 🙂 Samsung GalaxySL (2.3.6) y Nexus4 (4.4).

Si alguien me puede ayudar con esta situación fea. Gracias por adelantado.

¿Has probado este?

 setContentView(R.layout.activity_direction_3); getWindow().getDecorView().setBackgroundColor( android.R.color.transparent); 

Quitar Tema translúcido:

 android:theme="@style/Theme.AppCompat.Translucent" 

Y usa tu Activity en manifest.xml como:

 <activity android:name=".SearchActivity" android:screenOrientation="portrait"> 
  • Cómo deshabilitar cualquier evento en una vista en Android?
  • Estiramiento / escala de una región específica de vista / mapa de bits
  • Problema con el teclado al enfocar el texto de edición de fondo en Android
  • Mantenga la sesión entre loadUrl de Android WebView
  • Animación de Android - Estado de vista inicial
  • Establecer el margen negativo en la vista programáticamente
  • Diferencia entre setAlpha y setImageAlpha
  • Cómo dibujar un círculo con gradiente radial en un lienzo?
  • Cargar imágenes en GridView con Universal Image Loader
  • ¿Hay una manera de localizar de forma programática todas las ventanas dentro de una aplicación determinada?
  • ¿Cómo puedo inhabilitar todos los eventos táctiles en todos los niños de un ViewGroup?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.