Как закрыть диалог в Android, нажав на него внутри? - PullRequest
7 голосов
/ 08 февраля 2012

Я видел несколько сообщений о том, как закрыть диалоговое окно, нажав снаружи. Но есть ли способ получить ту же функциональность, щелкнув внутри диалогового окна?

Есть ли какие-либо прослушиватели для диалогового окна, которые обнаружат касание в диалоговом окне?

Ответы [ 6 ]

13 голосов
/ 02 апреля 2012

Переопределение Dialog.onTouchEvent(...) ловит любое нажатие в любом месте экрана.Чтобы закрыть диалоговое окно, коснувшись любого места:

Dialog dialog = new Dialog(this) {
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    // Tap anywhere to close dialog.
    this.dismiss();
    return true;
  }
};

Этот фрагмент снимает необходимость вызова dialogObject.setCanceledOnTouchOutside(true);.

3 голосов
/ 08 февраля 2012

Предположительно, вы хотите обнаружить сенсорное событие в любом месте в пределах диалога. Если вы создаете пользовательский диалог (то есть, собирая набор View s в какой-либо макет View, а затем устанавливаете родительский элемент View в качестве основного вида содержимого диалога, используя .setContentView()), возможно, Вы можете просто установить onTouch слушатель для этого родительского содержимого View. Кроме того, вы могли бы захватить представления, используя mDialog.findViewById(), поэтому, если, например, вы использовали AlertDialog, возможно, вы могли бы каким-то образом определить, какой идентификатор ресурса использовать для захвата его основного макета View.

1 голос
/ 08 февраля 2012

Если у вас есть Layout в вашем диалоге, вы можете получить ссылку на это как представление и добавить к нему onClickListener.Таким образом, предполагая, что ваш диалог имеет пользовательский макет и просмотр всего диалога, получите ссылку на это.

Например, предполагая, что в диалоге есть LinearLayout с именем mainll, который содержит ваши пользовательские представления, вы должны:

LinearLayout ll - (LinearLayout) findViewById(R.id.mainll);
ll.setOnClickListener(...) { onClick()... }

Тогда каждый раз, когда что-либо щелкается в LinearLayout, оно регистрирует щелчоксобытие.

0 голосов
/ 20 августа 2014
here i have taken my close icon ,if u need u can take anything like button

first of all u have implement to the class

class somethingclass Dialog implements View.OnClickListener

then set the event for particular 

      icon_close.setOnClickListener(this);

then override the class function

    @Override
    public void onClick(View v) {
        if(R.id.icon_close==v.getId()){
            dismiss();
        }else
}


Note:  if passible u can give dilaog.dismiss();
0 голосов
/ 05 октября 2012

Вот пример, который объясняет, как обрабатывать события onTouch в диалоге.Хитрость заключается в создании пользовательского прослушивателя.

http://about -android.blogspot.co.uk / 2010/02 / create-custom-dialog.html

0 голосов
/ 08 февраля 2012

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

...