2009-01-20 7 views
14

Ich habe eine Anwendung, die ein primäres Layout von Hochformat hat (es ist als Hochformat fixiert), und es gibt eine Stelle, um Text einzugeben. Ich würde gerne wie ein Popup-Fenster in Querformat mit dem Hintergrundbild ausgeschliffen starten. Ich weiß, dass es ein Popup-Widget gibt, aber jede Idee zum Drehen der Textbearbeitungsbox wäre großartig. Wenn Sie die Tastatur in eine Hochformatansicht (nur Textfeld) verschieben, während die Tastatur herausgezogen wird, würde dies auch funktionieren, ebenso wie das Anzeigen eines neuen Bildschirms mit dem Textfeld auf der Tastaturfolie.Wie zeige ich eine Textbearbeitungsbox "über" dem Bildschirm?

Antwort

37

Die einfachste Lösung für Ihr Problem ist, Ihre EditText innerhalb einer separaten dialog themed Aktivität anzuzeigen, die Sie innerhalb Ihrer Hauptaktivität (Hochformat) starten.

Die EditText-Aktivität sollte nicht so ausgerichtet sein, dass sie sich so dreht, wie Sie es erwarten, wenn Sie die Tastatur herausziehen.

Erstellen der Texteingabe Aktivität

Erstellen Sie eine neue Aktivität der nur die EditText Ansicht enthält und alles, was Sie (wahrscheinlich OK/Abbrechen Buttons und vielleicht ein Etikett?) Enthalten sein sollen. Setzen Sie innerhalb des Manifests sein Thema auf Theme.Dialog.

<activity android:name="TextEntryActivity" 
      android:label="My Activity" 
      android:theme="@android:style/Theme.Dialog"/> 

Fogging oder Verwischen die Aktivitäten hinter einem Dialog wird durch Modifizieren der Fenstereigenschaften der Vordergrundaktivität (Ihr Texteingabedialog) durchgeführt. Verwenden Sie in der onCreate-Methode getWindow().setFlags, um Unschärfen auf Hintergrundaktivitäten anzuwenden.

getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, 
        WindowManager.LayoutParams.FLAG_BLUR_BEHIND); 

Launching und Reading eingegebenen Werte aus der Texteingabe Aktivität

Verwenden startActivityForResult die Texteingabeaktivität zu starten. Rufen Sie innerhalb dieser Aktivität setResult auf, um die Textzeichenfolge zurückzugeben, die mit den in this post beschriebenen Techniken in die zurückgegebene Absicht eingegeben wurde.

Überschreiben Sie die Methode onActivityResult, um auf das Ergebnis der untergeordneten Aktivität zu warten.

Auslösen Einführung auf Tastatur Exposed

Sie können die Texteingabe Aktivität starten, wann immer Sie wollen, aber wenn Sie es immer angezeigt werden soll, wenn die Tastatur freigelegt wird dieses Ereignis explizit erfassen kann.

Beginnen Sie mit dem Hinzufügen des Attributs android:configChanges zum Manifesteintrag der Porträtaktivität. Es sollte registriert werden, um auf keyboardHidden zu hören.

android:configChanges="keyboardHidden" 

Innerhalb dieser Aktivität, außer Kraft setzt onConfigurationChanged die Texteingabeaktivität zu starten.

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    Intent i = new Intent(this,TextEntryActivity.class);  
    startActivityForResult(i, STATIC_INTEGER_VALUE); 
} 

Sie wollen, dass die Tastatur freigelegt wird (und nicht versteckt) bestätigen können überprüfen, bevor der newconfig Variable mit der Texteingabeaktivität zu starten.

Sie können die gleiche Technik auch verwenden, um automatisch von der Texteingabe zurückzukehren, wenn die Tastatur ausgeblendet ist.

+0

Vielen Dank für Ihren Einblick. – Chrispix