2010-08-16 16 views
5

estoy jugando un poco con algo de desarrollo teclado y tratar de mostrar un cuadro de diálogo emergente cuando se pulsa una tecla determinadaAndroid IME: ¿cómo mostrar un cuadro de diálogo emergente?

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 CONTEXT. En una aplicación normal, sería this. También probé getApplicationContext() y getBaseContext(), pero ninguno de esos funciona -> bloqueos del teclado.

android.view.WindowManager $ BadTokenException: No se puede agregar ventana - nula ficha sea no para una aplicación

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

la interfaz InputConnection es el canal comunicación de un InputMethod nuevo a la aplicación que es recei ving su entrada. Es utilizado para realizar operaciones tales como leer texto alrededor del cursor, confirmar el texto en el cuadro de texto y enviar eventos clave a la aplicación.

Hasta ahora no he podido 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 definitivamente sería apreciada.


Actualización:

Para proporcionar una mejor idea de lo que trato de lograr he subido una captura de pantalla del teclado Swype, que hace exactamente eso: que muestra un cuadro de diálogo emergente cuando una llave especial se presiona en el teclado.

Swype pop-up dialog

+0

Por favor, ¿me ayudas a configurar tu propio teclado? .He hecho uso de la aplicación por separado. Quiero mostrar un pequeño teclado cerca del TextBox (izquierda o derecha). Esta es mi pregunta. stackoverflow.com/questions/7357876/... He hecho mi propio teclado usando Android API demo ... – Piraba

Respuesta

4

paz sea con aquellos que siguen la orientación, 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.

+0

Y también contigo, lol. – JPM

+0

Por favor, ¿me ayuda a configurar su propio teclado? .He hecho uso de la aplicación por separado. Quiero mostrar un pequeño teclado cerca del TextBox (izquierda o derecha). Esta es mi pregunta. stackoverflow.com/questions/7357876/... He hecho mi propio teclado usando la demostración de la API de Android. – Piraba

0

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

+0

Dos problemas: 1) Estoy desarrollando un IME (teclado), así que no es mi actividad 2) ¿Cómo obtengo la referencia? a la actividad actual? (Esa es en realidad mi pregunta anterior) – znq

+0

Una cosa es segura, no se puede mostrar ningún cuadro de diálogo de ApplicationContext. ¿Por qué no tomas una referencia de contexto en tu constructor de la vista? – fedj

+0

Porque es un servicio de teclado que habla con cualquier campo de entrada de texto de otras aplicaciones (no mías): http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html – znq

3

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

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

Y establecer WindowManager.LayoutParams.token a ser el símbolo de la ventana IME (a través de Vista .getWindowToken()).

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

+0

Gracias por apuntarme en la dirección correcta . Además, al mirar el código fuente del teclado predeterminado de Android respondí todas mis preguntas. – znq

2

Hacer una actividad y en el archivo de manifiesto que la actividad dan el atributo

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

es muy sencillo, basta con crear la actividad como aquí (con a cualquier punto de vista), escribir el código de diálogo en el que

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 van a archivo de manifiesto de Android y añadir una actividad similar,

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

es todo, disfruta

Cuestiones relacionadas