2012-02-07 13 views

risposta

3

Presumibilmente si desidera rilevare un evento di tocco in qualsiasi punto all'interno dei limiti di una finestra di dialogo. Se stai creando una finestra di dialogo personalizzata (ad esempio assemblando un set di View di un ordinamento come impostazione principale del contenuto della finestra di dialogo utilizzando .setContentView()), potresti semplicemente impostare un listener onTouch quel contenuto genitore View. Inoltre, è possibile afferrare le viste usando mDialog.findViewById(), quindi se ad esempio si utilizza uno AlertDialog, è possibile determinare in qualche modo quale ID di risorsa utilizzare per afferrare il suo layout principale View.

+0

Grazie. Mi mancava la parte della finestra di dialogo prima di findViewById 0_0 – Ahmed

0

È sempre possibile creare la propria attività Dialog e terminare la chiamata() quando l'utente fa clic sull'area in cui si desidera chiudere la finestra di dialogo.

+0

Grazie per la risposta. Ma voglio che la finestra di dialogo passino al passaggio del mouse sopra la mia attività corrente (c'è un'area trasparente sopra e sotto la finestra di dialogo da cui viene visualizzata la mia attività corrente). Per eseguire l'autoingegnerizzazione, la finestra di dialogo viene visualizzata quando si fa clic su un pulsante nella mia attività. Sono in grado di chiudere la finestra toccando l'area esterna alla finestra di dialogo utilizzando dialog.setCanceledOnTouchOutside (true); Secondo i reks, non posso usare alcun pulsante sulla finestra di dialogo! Quindi, sto cercando di trovare un modo per chiudere la finestra di dialogo quando viene cliccato. – Ahmed

+0

È possibile utilizzare qualsiasi layout desiderato con un'attività; compreso uno che è trasparente. Sembrerà proprio come una finestra di dialogo e puoi far sì che si comporti come preferisci. Se vuoi davvero qualcosa che assomiglia e si comporta come una finestra di dialogo modale ma con logica di eliminazione personalizzata, funzionerà. –

1

Se si dispone di un layout nella finestra di dialogo, è possibile ottenere un riferimento a tale vista e inserire un onClickListener su tale. Pertanto, supponendo che la finestra di dialogo abbia un layout personalizzato e visualizzi l'intera finestra di dialogo, ottieni un riferimento.

Ad esempio, ipotizzando una finestra di dialogo ha un nome LinearLayout mainll, che contiene le visualizzazioni personalizzate, si farebbe:

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

Poi qualsiasi momento nulla si fa clic all'interno del LinearLayout, sarà registrare un evento click.

10

Ignora Dialog.onTouchEvent(...) rileva qualsiasi tocco, in qualsiasi punto dello schermo. Per chiudere la finestra di dialogo toccando ovunque:

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

Questo frammento annulla la necessità di chiamare 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();