2009-01-20 8 views
14

J'ai une application qui a une disposition principale de portrait (il est fixé comme portrait), et il y a un endroit pour taper du texte. Je voudrais lancer comme une fenêtre contextuelle en orientation paysage avec l'image de fond embuée. Je sais qu'il y a un widget contextuel, mais toutes les idées pour faire tourner la boîte d'édition de texte seraient géniales. Le faire pivoter en mode portrait (zone de texte uniquement) lorsque le clavier est déplacé fonctionnerait également, tout comme le ferait un nouvel écran avec la zone de texte sur la diapositive du clavier.Comment afficher une zone d'édition de texte "sur" l'écran?

Répondre

37

La solution la plus simple à votre problème est d'afficher votre EditText dans une activité thématique séparée dialog que vous lancez à partir de votre activité principale (portrait fixe).

L'activité EditText ne doit pas avoir son orientation corrigée, elle pivote donc comme vous le souhaitez lorsque vous faites glisser le clavier.

Création du texte Activité d'entrée

Créer une nouvelle activité de gestion contient seulement le EditText Voir et tout ce que vous voulez inclure (probablement boutons OK/Annuler et peut-être une étiquette?). Dans le manifeste mettre son thème à Theme.Dialog.

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

brumisation ou brouillant les activités derrière une boîte de dialogue se fait en modifiant les propriétés de la fenêtre de l'activité de premier plan (votre dialogue de saisie de texte). Dans sa méthode onCreate, utilisez getWindow().setFlags pour appliquer un flou aux activités de fond.

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

Lancement et lecture de la valeurs programmées Texte Activité Entrée

Utilisez startActivityForResult pour lancer l'activité de saisie de texte. Dans cette activité, appelez setResult pour renvoyer la chaîne de texte entrée dans l'intention renvoyée en utilisant les techniques décrites dans this post. Remplacer la méthode onActivityResult pour écouter le résultat de la sous-activité.

Déclencher Lancement sur le clavier Exposed

Vous pouvez lancer l'entrée texte activité chaque fois que vous voulez, mais si vous voulez afficher toujours lorsque le clavier est exposé, vous pouvez capturer cet événement explicitement.

Commencez par ajouter l'attribut android:configChanges à l'entrée du manifeste de l'activité Portrait. Il devrait être enregistré pour écouter keyboardHidden.

android:configChanges="keyboardHidden" 

Au sein de cette activité, passer outre onConfigurationChanged pour lancer l'activité de saisie de texte.

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

Vous pouvez vérifier pour confirmer le clavier est exposé (plutôt que caché) en utilisant la variable NewConfig avant de lancer l'activité de saisie de texte.

Vous pouvez également utiliser la même technique pour revenir automatiquement à l'activité de saisie de texte lorsque le clavier est masqué.

+0

je vous remercie pour votre avis. – Chrispix

Questions connexes