En évitant PopupWindow licenciement après avoir touché à l'extérieur

Je voudrais utiliser un PopupWindow avec les comportements suivants/caractéristiques:

  • Il peut recevoir le focus (a des contrôles à l'intérieur par exemple. les boutons)
  • La Vue 'de la rubrique' popupwindow a consommer de la touche à l'extérieur de la popup correctement
  • .. mais le popupwindow doit rester sur l'écran, même après un clic en dehors de

J'ai trouvé des tas de posts concernant PopupWindow mais aucun d'entre eux demandé la question de savoir comment faire face à une telle situation..

Je pense que j'ai essayé toutes les combinaisons possibles de setOutsideTouchable(), setFocusable(),setTouchable() mais je suis coincé. Popup traite de clics sur il le faut, mais elle disparaît toujours au toucher et à l'extérieur.

Mon code actuel est :

View.OnTouchListener customPopUpTouchListenr = new View.OnTouchListener(){

    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
        Log.d("POPUP", "Touch false");
        return false;
    }

};


LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout layout= (LinearLayout)inflater.inflate(R.layout.insert_point_dialog, null);
PopupWindow pw = new PopupWindow(layout,400,200,true);
pw.setOutsideTouchable(true);
pw.setTouchable(true);
pw.setBackgroundDrawable(new BitmapDrawable());
pw.setTouchInterceptor(customPopUpTouchListenr);
pw.showAtLocation(frameLayout, Gravity.BOTTOM, 0, 0);

Mon but est de créer une fenêtre flottante qui se comporte comme une "boîte à outils" dans un logiciel comme gimp: a certains contrôles à l'intérieur, reste en haut, jusqu'à la fermeture par bouton 'X', et permettant d'interagir avec les contrôles à l'extérieur-dessous..
Peut-être il ya une meilleure façon de le faire, pas un PopupWindow? Mais je n'ai pas encore trouvé plus convenable de contrôle.

OriginalL'auteur Michał Wróbel | 2012-05-02