¿Por qué mi menú de edición / copia de EditText se encuentra debajo de EditText? ¿Cómo cambiar el orden z de la ventana emergente?

NOTA

Si alguien sabe cómo ordenar (z-orden) Windows añadido a través de windowmanager, también aceptará la respuesta porque es respuesta a toda la pregunta. En realidad solo encuentro hacer windowManager.removeView(MyView) siguiendo immediatly por windowManager.addView(MyView) para poner una vista delante de la otra, pero esto no es ideal porque es visualmente eliminar y agregar la vista. Se vea loco que su no es construir en función en android para hacer una simple pensar.


Creo una vista (linearlayout) que contiene un EditText. Añado esta vista en la actividad a través de WindowManager.addView (view, Layout_Params);

Pero tengo el problema que cada popup que el edittext generará (como el menú de la copia / pasado o del menú de la sugerencia de la palabra) estará bajo otras vistas, incluso incluso su poseer la opinión de EditText (no en la imagen el edittext tiene un fondo transparente)

También algo un poco extraño, el popup generado por el último EditText w Yo seré Yo estaré

Introduzca aquí la descripción de la imagen

Introduzca aquí la descripción de la imagen

Introduzca aquí la descripción de la imagen

I crear las vistas (es decir: LinearLayout) con estos params de diseño:

 protected WindowManager.LayoutParams createLayoutParams() { WindowManager.LayoutParams p = new WindowManager.LayoutParams(); p.gravity = Gravity.LEFT | Gravity.TOP; p.width = 0; p.height = 0; p.format = PixelFormat.TRANSLUCENT; p.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED; p.flags = NOT_FOCUSABLE_FLAGS; // TYPE_APPLICATION allows for popups in browser windows (like edit menus) p.type = WindowManager.LayoutParams.TYPE_APPLICATION; p.token = null; return p; } 

Y muestro la vista (que contienen sólo un edittext) como este:

  private final WindowManager mWindowManager; mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams lp = createLayoutParams(); mWindowManager.addView(view, lp); 

Así que ¿cómo hacer que el popup conectado a la editText delante de todo?

Esta pregunta también puede ayudar un poco (sobre el orden z de la vista de la ventana): ¿Cómo trabajar el orden z de la vista (es decir: ventana) añadido a través de WindowManager?

Esto se espera, si usted ve la documentación de DecorView, le da el fondo de la vista actual.

Lo que estás haciendo es iniciar la barra de acción en el decorview, por lo tanto, su llegada en el fondo. Lea este artículo para más detalles http://www.curious-creature.com/2009/03/04/speed-up-your-android-ui/

Para resolver este problema, necesitas obtener la vista actual, para la cual puedes usar View focusedView = (View) yourParentView.getFocusedChild ();

Es posible que te ayude, pruébalo.

La respuesta clave es android: windowActionModeOverlay

In res / style.xml define un nuevo tema que extiende tu tema original:

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="Theme.Black.NoTitleBar.ActionModeOverlay" parent="android:Theme.Black.NoTitleBar"> <item name="android:windowActionModeOverlay">true</item> </style> </resources> 

O simplemente añadir una línea verdadera en su tema si ya ha definido uno.

Haga que su actividad utilice el tema definido anteriormente en AndroidManifest.xml:

 <activity android:name="you.AppActivity" android:theme="@style/ActionModeOverlay" > 

Pruebe WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

En lugar de WindowManager.LayoutParams.TYPE_APPLICATION;

En realidad, no es posible ordenar (z-order) ventanas añadidas a través de windowmanager. La única manera es quitar la ventana y agregarla de nuevo.

  • Logcat para varios dispositivos que se ejecutan al mismo tiempo en Android Studio?
  • Ventana emergente como any.do
  • La exención 'No se puede agregar ventana - token de Android' no es para una aplicación '
  • Actividad de Android que no se muestra cuando se desactiva la pantalla y se bloquea la pantalla
  • Android 1.6: "android.view.WindowManager $ BadTokenException: No se puede agregar ventana-token null no es para una aplicación"
  • Cómo agregar una vista flotante a Android Window manager y escuchar los eventos del botón System / Hardware
  • Detectar la contraseña de bloqueo de la pantalla de bloqueo por el usuario en Android
  • Android: textisselectable no funciona en la ventana TYPE_SYSTEM_ALERT
  • ¿Alternativa a "FLAG_BLUR_BEHIND" en Android?
  • Cómo obtener la ventana de un InputMethodService?
  • TYPE_SYSTEM_OVERLAY en ICS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.