2012-02-07 21 views
5

私は外部をクリックしてダイアログを閉じる方法についていくつかの記事を見てきました。しかし、ダイアログウィンドウの内側をクリックして同じ機能を利用する方法はありますか?Androidでダイアログを閉じるにはどうすればいいですか?

ダイアログウィンドウのタップを検出するダイアログのリスナーはありますか?

答えて

3

恐らく、ダイアログの境界内の任意の場所でタッチイベントを検出したいと考えています。あなたがカスタムダイアログを作成している場合(Viewのセットを何らかの並べ替えのViewに組み立てて、ダイアログのメインコンテンツビューとしてView.setContentView()を使用して設定した場合)、おそらくonTouchリスナーをそのコンテンツの親はViewです。さらに、mDialog.findViewById()を使用してビューを保持することができます。たとえば、AlertDialogを使用していた場合、メインレイアウトViewを保持するためにどのようなリソースIDを使用するかを決めることができます。

+0

ありがとうございます。私はfindViewById 0_0の前にダイアログ部分を見逃していました – Ahmed

0

ダイアログボックスを閉じるには、独自のDialogアクティビティを作成し、finish()を呼び出します。

+0

答えをいただき、ありがとうございます。しかし、私は現在のアクティビティの上にダイアログのホバーを置いておきたいです(私の現在のアクティビティが表示されているダイアログの上と下に透明な領域があります)。私のアクティビティのボタンがクリックされるとダイアログが表示されます。 dialog.setCanceledOnTouchOutside(true)を使用して、ダイアログ外の領域をタップしてダイアログを閉じることができます。 Reksによると、私はDialogのボタンを使用できません!したがって、私はそれがクリックされたときにダイアログを閉じる方法を探しています。 – Ahmed

+0

アクティビティで任意のレイアウトを使用できます。透明なものも含みます。それはダイアログボックスのように見え、あなたが望むどんなふうにでも動作させることができます。あなたが本当にモーダルダイアログボックスのように見えて振る舞いますが、カスタムディスマイスロジックを持つものが本当に必要な場合は、これが機能します。 –

1

ダイアログにレイアウトがある場合は、そのビューへの参照をビューとして取得し、その上にonClickListenerを置くことができます。だからあなたのダイアログがカスタムレイアウトを持っていて、ダイアログ全体を表示しているとすれば、それを参照してください。例えば

、あなたは、ダイアログがカスタムビューが含まれていmainllという名前のLinearLayoutを、持っているだろうと仮定すると:

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

が次にいつでも何でものLinearLayoutの中にクリックすると、そのクリックイベントを登録します。

10

オーバーライド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);を呼び出す必要が無効になります。

0
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(); 
関連する問題