Android: EditText dans la boîte de Dialogue n'a pas tirer vers le haut du clavier virtuel

J'ai donc obtenu ce qui semble être un problème commun, qui est que l'EditText dans ma boîte de dialogue ne s'affiche pas lorsqu'il obtient le focus. J'ai vu plusieurs solutions de contournement, comme dans ce fil, cette une et cette une (et beaucoup plus), mais je n'ai jamais vu une explication satisfaisante pour pourquoi ce qui se passe dans la première place.

Je préférerais de beaucoup avoir android utiliser son propre comportement par défaut pour EditTexts que de construire mon propre, mais il semble que tout le monde (dans les discussions) a admis que le comportement par défaut pour EditTexts dans les boîtes de dialogue est tout simplement un curseur et pas de clavier. Pourquoi serait-elle?

Pour l'enregistrement, aucune de ces solutions semblent être de travailler pour moi - le plus proche, j'ai été en mesure de venir oblige, un clavier apparaît sous la boîte de dialogue (à l'aide de InputMethodManager.toggleSoftKeyboard(*)). Ma configuration est API15, l'EditText affiche dans un pied de page sur une ListView dans un AlertDialog. L'EditText android:focusable="true" est réglé, et onFocusChangeListener est recevoir des événements de focus.

Edit:

Comme demandé, voici l'extrait de code que je travaille avec. Je ne vais pas l'embêter avec toute la mise en page, mais dans cette application particulière, le EditText apparaît dans la réponse à appuyer sur un bouton de la boîte de dialogue (similaire à une action en vue). Elle est contenue dans un RelativeLayout qui a par défaut la visibilité "disparu":

 <RelativeLayout 
       android:id="@+id/relLay"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_centerVertical="true"
       android:visibility="gone"
       android:layout_marginTop="5dp"
       android:layout_marginBottom="5dp">

        <ImageButton
            android:id="@+id/cancelBut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:background="@color/transparent"
            android:src="@drawable/cancelButton" 
            android:layout_margin="5dp"/>

        <ImageButton
            android:id="@+id/okBut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@id/cancelBut"
            android:background="@color/transparent"
            android:src="@drawable/okButton"
            android:layout_margin="5dp" />

        <EditText 
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:focusable="true"
            android:layout_toLeftOf="@id/okBut"/>
   </RelativeLayout>

Le code qui construit cette définit la visibilité de la relativeLayout à "Visible" (et cache les autres éléments de l'INTERFACE utilisateur). Cette devrait sera suffisant pour tirer vers le haut du clavier lorsque l'EditText obtient ciblée, basée sur mon expérience avec EditText. Cependant, pour certaines raisons, ce n'est pas le cas. J'pouvez définir les options suivantes onFocusChangeListener:

    edit_text.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                //For whatever reason we need to request a soft keyboard.
                    InputMethodManager imm = (InputMethodManager)dlg.getWindow().getContext().getSystemService(_Context.INPUT_METHOD_SERVICE);
                    if(hasFocus)
                        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
                    Log.v("DialogProblem", "Focus requested, " + (hasFocus?"has focus.":"doesn't have focus."));
                }
            }
        });

En utilisant cette configuration, lorsque je première entrer dans l'EditText, le onFocusChangedListener déclenche, et génère un journal qui, invariablement, ressemble à ceci:

Focus requested, has focus.
Focus requested, doesn't have focus.
Focus requested, has focus.

Le clavier s'affiche puis disparaît, probablement parce que je bascule à deux reprises, mais même quand je fais en sorte qu'il reste en place, c'est derrière la fenêtre de dialogue (en grisé) et il n'y a aucun moyen de l'obtenir sans fermer la boîte de dialogue.

Cela dit, je tiens à souligner que, même si je vais peut-être en mesure d'obtenir ce travail autour de travail, je suis principalement intéressés à trouver une raison simple pourquoi l'EditText n'est pas le déclenchement, en premier lieu, et pourquoi cela semble si banale!

  • Pourriez-vous poster le code snippet (où vous mettez le focus, ajouter un accent à l'écoute, etc)?
  • Je peux (et quand je serai de retour à un ordinateur), mais je pense que ma question plus générale n'implique pas l'accent de l'auditeur. Je me demandais pourquoi il semble être un problème commun que de modifier du texte dans une boîte de dialogue ne s'ouvre pas le clavier. Alors que je me ferais un plaisir d'utiliser un kluge si c'est la façon de le faire, mais j'aimerais savoir pourquoi une telle chose est nécessaire.
InformationsquelleAutor Paul | 2012-02-01