Question

D'accord, un autre problème bizarre. J'ai l'activité Main.java et DialogLikeActivity.java.

Dans principal Je

EditText (articleNumber) - phone input type (in .XML)
Button (articleOK)
list (list)

DialogLikeActivity (activité, mais de style avec un thème de dialogue et android: windowSoftInputMode = "stateAlwaysVisible" dans Manifest) je

EditText (articlePackaging) - phone input type (in .XML)
Button (finish)

Ce que je veux? Quand je rentre le clavier d'activité principale est ouverte avec le type d'entrée de téléphone et est très bien. Lorsque je clique sur le champ EditText, remplissez quelque chose et cliquez sur OK varible statique devient à l'état 1 (toujours afficher le clavier) -. Il est juste variable statique dans l'activité principale

public static int keyboardMode = 1;

En cliquant sur OK ouvre DialogLikeActivity avec clavier ouvert (type d'entrée de téléphone). Lorsque je clique sur OK onResume des coups de pied dans le principal

@Override
public void onResume() {
    super.onResume();

    if (keyboardMode == 1) {
        showKeyboard(articleNumber);
    } else {
        hideKeyboard(articleNumber);
    }
}   

public static void showKeyboard(View view) {
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);

    ((InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(view, 0);

    articleNumber.setInputType(InputType.TYPE_CLASS_PHONE);
}

public static void hideKeyboard(View view) {
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.hideSoftInputFromWindow(view.getWindowToken(), 0);

    articleNumber.setInputType(0);
}

// Listener to showKeyboard if user clicks on EditText field and set InputType to PHONE, insted it would remain (0)

    articleNumber.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showKeyboard(articleNumber);
        }
    });

// Listener so when user touches the list - it hides the keyboard and sets variable on 2 so keyboard is always HIDDEN

    list.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            hideKeyboard(articleNumber);
            keyboardMode = 2;

            return false;
        }
    });

// Listener so when user clicks on ArticleOK - keyboard is always OPEN

articleOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {               
                keyboardMode = 1;

                    Intent i = new Intent(NewOrderArticles.this, NewQuantityDialog.class);
                    i.putExtra("articleid", articleId);
                    startActivity(i);
            }
        }
    });

Et veille à ce que le clavier est ouvert avec le type d'entrée de téléphone. Si je clique sur Howewer / faire défiler la liste dans la variable principale keyboardMode devient 2 (toujours cacher) - de sorte que les peaux de clavier (avec méthode hideKeyboard appelé auditeur list.onTouch). Si je clique sur un certain article dans la liste, il ouvre à nouveau DialogLikeActivity avec clavier ouvert et le type d'entrée de téléphone. Si je clique sur OK onResume à coups de pied Principaux et cache clavier (voir code Upthere).

Comment cela ressemble s'il vous plaît voir la vidéo (bouton OK vidéo est le bouton articleOK) - Vidéo ( 3,24 MB) .

Donc en fait - si je clique sur OK (articleOK) Bouton - clavier doit toujours affiché , si je, commence cependant défiler répercutant la liste ou cliquez sur certains élément dans la liste - Clavier doit être montré que l'activité DialogLikeActivity , sinon principal doit rester caché (ofcourse si je clique sur le champ EditText sur le dessus, il ouvre à nouveau).

Sur la vidéo vous pouvez voir HTC Desire et tout fonctionne exactement comme je veux, mais - sur Galaxy S montrer toujours partie fonctionne, mais si je tape / faire défiler la liste, il ouvre de haut clavier de type lettre (!) au lieu de le cacher . Où est le problème?

bouton OK donc - toujours afficher le clavier (Main et DialogLikeActivity). Si tap / défiler le clavier Afficher la liste que dans DialogLikeActivity.

Était-ce utile?

La solution

J'ai le même problème avec un EditText qui apparaît sur le clavier avec des chiffres. Après avoir cliqué sur OK ou Annuler, le clavier virtuel ne cache pas et montre le clavier avec le type de lettre, sur l'appareil Samsung Galaxy S. Il fonctionne très bien sur les émulateurs 2.1 ou 2.2 et mon HTC Hero, mais pas sur l'appareil Samsung Galaxy S avec 2,2. J'ai aussi essayé: mgr.toggleSoftInput (InputMethodManager.HIDE_IMPLICIT_ONLY, 0); mais toujours aucune chance

EDIT: ok, problème résolu avec cette ligne seulement:

mgr.toggleSoftInput(0, 0);

et sans ces 2 lignes:

mgr.hideSoftInputFromWindow(view.getWindowToken(), 0);
articleNumber.setInputType(0);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top