2010-08-16 16 views
5

Ich spiele mit einiger Tastatur Entwicklung um und versuche, einen Pop-up-Dialog zu zeigen, wenn eine bestimmte TasteAndroid IME: Wie zeigt man einen Popup-Dialog?

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

jedoch gedrückt wird, ist das Problem der CONTEXT Teil. In einer normalen Anwendung wäre es nur this. Ich habe auch versucht getApplicationContext() und getBaseContext(), aber keiner von diesen funktioniert -> Tastatur stürzt ab.

android.view.WindowManager $ BadTokenException: Unable Fenster hinzuzufügen - Token null ist nicht für eine Anwendung

Also ich frage mich, wenn ich etwas mit InputConnection zu tun haben:

InputConnection die Schnittstelle ist der Kommunikationskanal von einem Inputmethod zurück zu der Anwendung, die recei ist ving seine Eingabe. Es ist verwendet, um solche Dinge wie Lesen Text um den Cursor, Commit Text in das Textfeld, und senden rohe Schlüsselereignisse an die Anwendung.

Bis jetzt war ich nicht in der Lage, herauszufinden, wie. Ich weiß definitiv, dass es möglich ist, seit ich es vorher gesehen habe. Ich könnte jemanden in die richtige Richtung zeigen, die auf jeden Fall geschätzt werden würde.


Update:

Um ein besseres Bild von dem, was ich versuche zu erreichen ich einen Screenshot der Swype-Tastatur hochgeladen, die genau das tut: ein Pop-up-Dialog zeigt, wenn eine spezielle Taste wird auf der Tastatur gedrückt.

Swype pop-up dialog

+0

Bitte helfen Sie mir, wie Sie Ihre eigene Tastatur einrichten? . Ich habe getrennte Anwendung verwendet. Ich möchte kleine Tastatur in der Nähe der TextBox (links oder rechts) zeigen. Das ist meine Frage. stackoverflow.com/questions/7357876/... Ich habe meine eigene Tastatur mit Android API Demo gemacht .. – Piraba

Antwort

4

Friede sei mit denen, die die Führung folgen, die Eigenschaft, die Aktivität geben,

Lösung:

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(); 

viel Glück.

+0

Und auch mit dir, lol. – JPM

+0

Bitte helfen Sie mir, wie Sie Ihre eigene Tastatur einrichten? . Ich habe getrennte Anwendung verwendet. Ich möchte kleine Tastatur in der Nähe der TextBox (links oder rechts) zeigen. Das ist meine Frage. stackoverflow.com/questions/7357876/... Ich habe meine eigene Tastatur mit Android API Demo gemacht .. – Piraba

0

Sie haben einen Verweis auf Ihre Aktivität Kontext zu erhalten. Wie auch immer, Sie sollten die showDialog-Methode der Aktivität verwenden.

+0

Zwei Probleme: 1) Ich entwickle ein IME (Tastatur), also ist es nicht meine Aktivität 2) Wie bekomme ich die Referenz zur aktuellen Aktivität? (Das ist eigentlich meine Frage oben) – znq

+0

Eines ist sicher, Sie können keine Dialog aus dem ApplicationContext anzeigen. Warum nehmen Sie keine Kontextreferenz in Ihrem Konstruktor der Ansicht? – fedj

+0

Weil es Tastaturbedienung ist, die mit jedem Texteingabefeld anderer (nicht meiner) Anwendungen spricht: http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html – znq

3

Ein IME wird nicht in einem Anwendungskontext ausgeführt, sodass Sie keine normalen Anwendungsfenster verwenden können. Sie können einen Dialog verwenden, aber Sie müssen das Fenster ändern, so dass der Fenstertyp dieser Art ist:

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

Und gesetzt WindowManager.LayoutParams.token das Zeichen des IME Fenster zu sein (über Ansicht .getWindowToken()).

Beachten Sie, dass der Dialog Popup-Fenster nicht anzeigen kann, da er in diesem Fall selbst ein Popup-Fenster ist. Der Koordinatenraum ist auch relativ zu Ihrem IME, es sei denn, Sie verwenden die Fensterflags, um ihn zu ändern.

+0

Danke, dass Sie mich in die richtige Richtung weisen . Darüber hinaus beantwortet der Standard-Tastatur-Quellcode von Android alle meine Fragen. – znq

2

eine Aktivität Stellen und in der Manifest-Datei

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

seine sehr einfach, erstellen Sie einfach Tätigkeit hier wie (ohne jede Ansicht), Code von Dialog schreiben darin

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(); 

} 
} 

jetzt gehen auf Android-Manifest-Datei und fügen Aktivität wie

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

alles, genießen

Verwandte Themen