2014-02-20 5 views
10

Я хочу отключить всплывающее окно, щелкнув за пределами всплывающего окна или кнопкой «Назад», но при нажатии на кнопку «Назад» мой выход приложения, вместо выхода из приложения, я хочу закрыть всплывающее окно.откройте всплывающее окно по кнопке «назад»

вот мой код,

ivmainmenu.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      LayoutInflater layoutInflater 
      = (LayoutInflater)getBaseContext() 
       .getSystemService(LAYOUT_INFLATER_SERVICE); 
      View popupView = layoutInflater.inflate(R.layout.popupwindow, null); 
      final PopupWindow popupWindow = new PopupWindow(popupView,LayoutParams.FILL_PARENT, 
        LayoutParams.WRAP_CONTENT); 
       popupWindow.showAsDropDown(ivmainmenu, 0,14); 
       popupView.setPadding(0, 0, 0, 10); 
       popupWindow.showAsDropDown(ivmainmenu); 

       popupWindow.setBackgroundDrawable(new BitmapDrawable()); 
       popupWindow.setOutsideTouchable(false); 

       TextView tvpopupwork = (TextView)popupView.findViewById(R.id.tvpopupwork); 
       TextView tvpopupabout = (TextView)popupView.findViewById(R.id.tvpopupabout); 
       TextView tvpopupservices = (TextView)popupView.findViewById(R.id.tvpopupservices); 
       TextView tvpopupcontact = (TextView)popupView.findViewById(R.id.tvpopupcontact); 

       Typeface typeFace2 = Typeface.createFromAsset(getAssets(),"fonts/arboriaboldregular.ttf"); 
       tvpopupwork.setTypeface(typeFace2); 
       tvpopupabout.setTypeface(typeFace2); 
       tvpopupservices.setTypeface(typeFace2); 
       tvpopupcontact.setTypeface(typeFace2); 

       tvpopupwork.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         Intent intent = new Intent(Home.this,Ourwork.class); 
         intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
         startActivity(intent); 
        } 
       }); 

       tvpopupabout.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         Intent intent = new Intent(Home.this,Aboutus.class); 
         intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
         startActivity(intent); 
        } 
       }); 

       tvpopupservices.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 

         Intent intent = new Intent(Home.this,Services.class); 
         intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
         startActivity(intent); 
        } 
       }); 

       tvpopupcontact.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 

         Intent intent = new Intent(Home.this,Contact.class); 
         intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
         startActivity(intent); 
        } 
       }); 
       ivmainmenu.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 

        popupWindow.dismiss(); 
       } 
      } 
     }); 

Сво дает мне результат того, что я хочу, но когда я закрываю из меню не открывается снова, я хочу, чтобы открыть его снова, так что я должен делать? спасибо.

ответ

14

Заменить

popupWindow.setOutsideTouchable(false); 

с этим

popupWindow.setOutsideTouchable(true); 
popupWindow.setFocusable(true); 
+0

Не работает на Android 4.4.2 –

+1

я должен был установить фон с не нулевой Drawable, по крайней мере, 'popupWindow.setBackgroundDrawable (новый ColorDrawable (Color.TRANSPARENT));' –

0

Попробуйте так: Реализовать onBackPressed() и добавить

if(popup!=null) { 
    popup.dismiss(); 
    popup=null; 
} 

и установить PopWindow с ниже:

popup.setOutsideTouchable(true); 
+0

ACTION_OUTSIDE ??? Какая польза от этого? – akky777

+0

@ akky777 Вы получите ACTION_OUTSIDE, когда прикосновение находится вне активности. но это только для моего требования –

0

Вы можете переопределить обратный вызов onBackPressed() в своем коде и проверить, отображается ли ваше всплывающее окно (затем отключайте его), иначе вы вызываете супер, чтобы получить нормальное поведение.

8

Поддерживать глобальную ссылку на PopUpWindow и переопределить onBackPressed() ...

@Override 
public void onBackPressed() { 
    if (popupWindow != null && popupWindow.isShowing()) { 
     popupWindow.dismiss(); 
    } else { 
     super.onBackPressed(); 
    } 
} 

Уволить тем же Button ...

ivmainmenu.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if(popupWindow != null && popupWindow.isShowing()) { 
       popupWindow.dismiss(); 
       popupWindow = null; 
      } else { 
       // show pop up now 
      } 
     } 
    }); 
+0

Есть ли решение закрыть всплывающее окно той же кнопкой? – akky777

+0

@ akky777 см. Отредактированный ответ ... –

+2

он не работает – akky777

1

Попробуйте это ..

Используйте PopupWindow popupWindow как Global переменная

использование popup.setOutsideTouchable(true);

@Override 
public void onBackPressed() { 
    if (popupWindow != null) { 
     if (popupWindow.isShowing()) { 
      popupWindow.dismiss(); 
     } 
    } else { 
     finish(); 
    } 
} 
+0

@GopalRao благодарит за изменение. – Hariharan

+1

Вероятно безопаснее использовать 'if (popupWindow! = Null && popupWindow.isShowing())' – tar

2

пожалуйста, напишите onBackPressed() и имеют следующий код

if(popup!=null){ 
    //dismiss the popup 
    popup.dismiss(); 
    //make popup null again 
    popup=null; 
} 
+0

@Gopal Rao many thx gopal ji +1 для вас –

+0

Добро пожаловать. Так или иначе! Не повышайте права на редактирование :-) ... –

3
popupWindow.setBackgroundDrawable (new BitmapDrawable()); 
popupWindow.setOutsideTouchable(true); 
;) 
Смежные вопросы