Question

J'ai une application qui a une disposition principale de portrait (elle est définie en tant que portrait), et il y a un endroit pour taper du texte. Je voudrais lancer comme une fenêtre popup en orientation paysage avec l'image de fond brumée. Je sais qu'il existe un widget Popup, mais toute idée de faire pivoter la zone d'édition de texte serait géniale. Le faire pivoter dans une vue portrait (zone de texte uniquement) lorsque le clavier est sorti fonctionnerait également, tout comme l'affichage d'un nouvel écran avec la zone de texte sur la diapositive clavier.

Était-ce utile?

La solution

La solution la plus simple à votre problème consiste à afficher votre activité EditText dans une activité distincte sur le thème dialogue que vous lancez à partir de votre activité principale (portrait fixe).

L’orientation de l’activité EditText ne doit pas être fixée, elle tournera donc comme vous le souhaiteriez lorsque vous tirez le clavier.

Création de l'activité de saisie de texte

Créez une nouvelle activité qui ne contient que la vue Edition / Texte et tout ce que vous souhaitez inclure (probablement des boutons OK / Annuler et peut-être une étiquette?). Dans le manifeste, définissez son thème sur Theme.Dialog .

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

Les activités derrière ou derrière une boîte de dialogue sont floues ou floues en modifiant les propriétés de la fenêtre de l'activité de premier plan (votre boîte de dialogue de saisie de texte). Dans sa méthode onCreate, utilisez getWindow (). SetFlags pour appliquer le flou à toutes les activités en arrière-plan.

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

Lancement et lecture des valeurs saisies à partir de l'activité de saisie de texte

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 à l'aide des techniques décrites dans cet article .

Remplacez la méthode onActivityResult pour écouter le résultat de la sous-activité.

Déclenchement du lancement sur le clavier exposé

Vous pouvez lancer l'activité de saisie de texte à tout moment, mais si vous souhaitez toujours l'afficher lorsque le clavier est exposé, vous pouvez capturer cet événement de manière explicite.

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

android:configChanges="keyboardHidden"

Dans cette activité, remplacez onConfigurationChanged pour lancer l'activité d'entrée de texte.

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

Vous pouvez vérifier que le clavier est exposé (plutôt que masqué) à l'aide de la variable newConfig avant de lancer l'activité de saisie de texte, Activity.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top