5 votes

Éviter que PopupWindow ne prenne le focus

J'ai un EditText qui met à jour une PopupWindow à chaque pression sur une touche. Si je crée la PopupWIndow avec .setFocusable(true), elle prend le focus et je ne peux pas continuer à taper. Cependant, si j'utilise .setFocusable(false), le ListView à l'intérieur de la fenêtre popup ne déclenche pas le OnItemClickedListener.

Est-il possible de créer une PopupWindow sans qu'elle capte le focus, mais en rendant les widgets qui s'y trouvent cliquables ?

(Le PopupWidow n'est pas destiné à l'autocomplétion, donc je ne pense pas que l'AutoCompleteTextView soit ce dont j'ai besoin).

3voto

Kislingk Points 450

Je pense que vous pouvez utiliser ListPopupWindow. Elle gère certains problèmes de focus pour vous. Voici un code très simple. Il faut encore ajouter des listeners pour répondre à vos besoins. Mais il résout les problèmes de focus.

ListPopupWindow popup;
EditText editText;
String[] strAry = {"a", "2", "3", "4", "5", "6", "7", "8", "9"};

editText=(EditText)this.findViewById(R.id.editText);
popup= new ListPopupWindow(this.getApplicationContext());
popup.setAdapter(new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,strAry));
popup.setAnchorView(editText);
popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NEEDED);

editText.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View eventView) {
        if(!popup.isShowing()){
            popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NEEDED);
            popup.show();
        }
    }
});
editText.addTextChangedListener(new s(){
    @Override
    public void afterTextChanged(Editable arg0) {}
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
        int arg3) {}
    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
        if(!popup.isShowing()){
            popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NEEDED);
            popup.postShow();
        }
    }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X