Intereting Posts
Как отключить историю совместного использования при использовании ShareActionProvider? Android – поместить имя изображения «пакет» выдает ошибку времени компиляции Решив, кто является игроком один и два в игре на основе раунда с Google Play Game Services Как создать строки в xml Как скрыть softkeyboad, когда активность начинается в Android? Что такое режим Threading по умолчанию для SQLite в Android? Обратный вызов автофокусировки камеры не происходит ОШИБКА: В <объявлении-стиль> MenuView, неспособный найти атрибут android: preserveIconSpacing Как получить путь к папке lib для установленного пакета Recycler View с несколькими строками и столбцами – AutoFit, например Flow Layout Как писать содержит запрос в SQLite fts3 полнотекстовый поиск Android AlertDialog Single Button Android: запись звука в формате mp3 Eclipse сообщает об обновлении библиотеки позже, чем подключаемый модуль ADT Eclipse «Недопустимое описание проекта» при создании нового проекта из существующего источника

Закрыть всплывающее окно кнопкой «Назад»

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

Вот мой код,

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(); } } }); 

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

Solutions Collecting From Web of "Закрыть всплывающее окно кнопкой «Назад»"

замещать

 popupWindow.setOutsideTouchable(false); 

с этим

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

Поддерживать глобальную ссылку для 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 } } }); 

Напишите onBackPressed( ) и получите следующий код

 if(popup!=null){ //dismiss the popup popup.dismiss(); //make popup null again popup=null; } 
 popupWindow.setBackgroundDrawable (new BitmapDrawable()); popupWindow.setOutsideTouchable(true); ;) 

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

Использовать PopupWindow popupWindow как глобальную переменную

Используйте popup.setOutsideTouchable(true);

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

Попробуйте этот способ: onBackPressed() и добавьте

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

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

 popup.setOutsideTouchable(true); 

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