2013-08-22 21 views
14

Voglio creare una finestra di dialogo modale per la mia applicazione.Come creare una finestra di dialogo modale in Android

così quando si apre la finestra di dialogo modale vengono bloccate le altre attività. nessun evento viene fatto come premere il tasto indietro o premere il tasto home.

e metti due pulsanti di opzione in quella finestra di dialogo annulla e ok.

Grazie ...

+1

Puoi mostrare il codice che hai provato? –

+0

la mia domanda è corretta, quindi quale voto negativo mi ha dato. –

+0

Non ho fatto downvote! Ho appena chiesto il codice. –

risposta

26

Ci sono molti tipi di Dialogs in Android. Si prega di dare un'occhiata a Dialogs. Immagino che quello che stai cercando sia qualcosa come AlertDialog. Questo è l'esempio di come è possibile implementare sul pulsante BackPress.

@Override 
public void onBackPressed() { 
    AlertDialog.Builder alert = new AlertDialog.Builder(this); 
    alert.setTitle("Do you want to logout?"); 
    // alert.setMessage("Message"); 

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      //Your action here 
     } 
    }); 

    alert.setNegativeButton("Cancel", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
      } 
     }); 

    alert.show(); 

} 
+0

grazie per il codice ma come implementerò sulla stampa dei tasti di casa. –

+0

Perché vuoi implementarlo sul tasto 'HOME'? Alcuni link per il tuo riferimento http: // StackOverflow.it/questions/4783960/call-method-when-home-button-pressed-on-android e http://stackoverflow.com/questions/2079691/overriding-the-home-button-how-do-i-get- rid-of-the-choice –

+0

Fortunatamente non è possibile gestire la pressione del tasto 'HOME'. Permetterebbe alle applicazioni di fare cose brutte. –

5

Prova questo ::

È necessario creare il layout che si desidera mostrare nel popup. è possibile creare file XML di layout e utilizzarlo in questo modo:

LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
      View layout = layoutInflater.inflate(R.layout.new_popup_layout, null); 
      final PopupWindow popupWindow = new PopupWindow(
        layout, 
         LayoutParams.WRAP_CONTENT, 
          LayoutParams.WRAP_CONTENT); 

È possibile anche fornire cliccare eventi di pulsante come questo:

ImageButton btnChoose = (ImageButton) layout.findViewById(R.id.btnChoose); 
      btnChoose.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
} 
}); 

e mostrargli il popup come questo: qui si vuole mostrare questo su clic del pulsante quindi la vista del pulsante sarà lì.

popupWindow.showAtLocation(anyview,Gravity.CENTER, 0, 0); 
9

Usa può utilizzare setCancellable (false); setCanceledOnTouchOutside (false); per la finestra di dialogo, che dovrebbe interrompere la finestra di dialogo dalla chiusura di BACK e toccando al di fuori della finestra di dialogo.

Non è possibile ignorare il pulsante HOME.

+1

In realtà, è possibile ignorare il pulsante Home ... rendendo l'applicazione un "Launcher". – Wildcopper

5

Prova come di seguito:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setMessage("Are you sure you want to exit?") 
    .setCancelable(false) 
    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     MyActivity.this.finish(); 
    } 
}) 
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     dialog.cancel(); 
    } 
}); 
AlertDialog alert = builder.create(); 

Per l'evento tasto Home:

No, non è possibile per ottenere l'evento tasto Home in Android. Dalla documentazione del keycode casa: http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HOME

public static int KEYCODE_HOME finale

codice costante chiave: tasto Home. Questa chiave viene gestita dal framework e non viene mai consegnata alle applicazioni .

+0

Solo una breve nota: non è possibile utilizzare hardcode "Sì" e "No". Invece, è possibile utilizzare risorse statiche come android.R.string.yes e android.R.string.no. –

Problemi correlati