Android IME: cómo mostrar un cuadro de diálogo emergente?

Estoy jugando con un poco de desarrollo del teclado y tratar de mostrar un cuadro de diálogo emergente cuando se presiona una cierta tecla

if (primaryCode == -301) { AlertDialog mDialog = new AlertDialog.Builder(CONTEXT) .setTitle("My dialog") .setMessage("Lets do it.") .setPositiveButton("ok", null).create(); mDialog.show(); } 

Sin embargo, el problema es la parte del CONTEXT . En una aplicación normal sería simplemente this . También intenté getApplicationContext() y getBaseContext() , pero ninguno de esos trabajos -> falla de teclado.

Android.view.WindowManager $ BadTokenException: No se puede agregar window-token null no es para una aplicación

Así que me pregunto si tengo que hacer algo con InputConnection :

La interfaz InputConnection es el canal de comunicación de un InputMethod de nuevo a la aplicación que está recibiendo su entrada. Se utiliza para realizar cosas como leer texto alrededor del cursor, enviar texto al cuadro de texto y enviar eventos de clave sin procesar a la aplicación.

Hasta ahora no pude averiguar cómo. Definitivamente sé que es posible, ya que lo he visto antes. Yo alguien podría señalarme en la dirección correcta que sin duda sería apreciado.


Actualizar:

Para proporcionar una mejor imagen de lo que intento lograr, cargué una captura de pantalla del teclado de Swype, que hace exactamente eso: mostrar un cuadro de diálogo emergente cuando se pulsa una tecla especial en el teclado.

Diálogo emergente de Swype

5 Solutions collect form web for “Android IME: cómo mostrar un cuadro de diálogo emergente?”

La paz sea con los que siguen la guía,

Solución:

 AlertDialog dialog; //add this to your code dialog = builder.create(); Window window = dialog.getWindow(); WindowManager.LayoutParams lp = window.getAttributes(); lp.token = mInputView.getWindowToken(); lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; window.setAttributes(lp); window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); //end addons alert.show(); 

buena suerte.

Un IME no se ejecuta en un contexto de aplicación, por lo que no puede utilizar ventanas de aplicación normales. Puede utilizar un cuadro de diálogo, pero tendrá que modificar su ventana para que el tipo de ventana sea este tipo:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_APPLICATION_PANEL

Y establezca WindowManager.LayoutParams.token como el símbolo de la ventana IME (a través de View.getWindowToken ()).

Tenga en cuenta que el cuadro de diálogo no podrá mostrar ventanas emergentes, porque en este caso es en sí misma una ventana emergente. También el espacio de coordenadas será relativo a su IME a menos que utilice los indicadores de ventana para cambiarlo.

Hacer una actividad y en el archivo de manifiesto dar a esa actividad el atributo

 android:theme="@android:style/Theme.Dialog" 

Es muy simple, sólo crear actividad como aquí (sin ninguna vista), escribir código de diálogo en él

 public class dialog extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Are you sure you want to Delete All Contacts?"); builder.setCancelable(false); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { //deleteAllContacts(); }// }); builder.setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); } } 

Ahora vaya al archivo de manifiesto de Android y agregue actividad como,

 <activity android:name=".dialog" android:theme="@android:style/Theme.NoDisplay"> </activity> 

Es todo, disfruta

Usted tiene que obtener una referencia a su contexto de actividad. De todos modos, debe usar el método showDialog de la Actividad.

  • ¿Cómo detectar presencia de teclado de hardware?
  • Obtener la altura del teclado suave en modo de pantalla completa
  • El teclado no desaparece cuando se utiliza iScroll
  • El teclado suave de Android se esconderá sin motivo
  • Android: Cómo evitar que el diseño se presione cuando se invoca el teclado
  • Teclado suave específico de la aplicación para Android
  • ¿Cómo puedo ocultar el teclado Android usando JavaScript?
  • ¿Cómo buscar con la tecla Intro en android personalizado InputMethodService?
  • Android: captura de acción para el teclado de entrar en el botón que se presiona
  • AdjustResize no funciona después de despedir el teclado haciendo clic en el teclado exterior
  • Mostrar sólo el teclado numérico en la aplicación Ionic / Cordova
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.