Prima di iniziare è doveroso fare una breve introduzione su cos'è la classe Dialog (precisamente android.app.Dialog). La classe Dialog, come dice il nome stesso, permette di visualizzare dei dialoghi, ovvero quelle finestre che vediamo comparire quando ci viene chiesta una conferma. Quando viene visualizzato un dialogo l'Activity sottostante viene momentaneamente bloccata.
Quando si hanno molti dialoghi da gestire il mio consiglio è sempre quello di creare una apposita classe (che io chiamo Dialoghi) e fare al suo interno un metodo mostra(int idDialogo) con delle variabili Intere statiche che passerete poi al metodo mostra. Un esempio pratico può chiarire le idee.
In questo caso manca tutta la gestione vera e propria del dialogo, che effettueremo tra poco, ma sommariamente questa impostazione è molto comoda e organizzata poichè basta istanziare la classe Dialoghi passandogli il contesto e successivamente, tramite il metodo mostra, scegliere il dialogo da visualizzare facendo
Ma vediamo ora come fare a creare il nostro dialogo personalizzato. Visto che ce l'abbiamo già sotto mano cominciamo dalla classe Dialoghi. Cosa dobbiamo aggiungere? La risposta è molto semplice: dobbiamo istanziare l'oggetto AlertDialog.Builder. Vediamo come fare.
Consiglio di inializzarlo nel metodo mostra ma anche nel costruttore va bene. Ora è chiaro che per poter avere un dialogo personalizzato dobbiamo definire noi il layout che deve avere e quindi andiamo a crearlo. Andiamo in /res/layout/ e creiamo un file XML che chiamiamo layout_dialogo. Potete mettere al suo interno tutto quello che volete e personalizzarlo come volete. In questo caso, giusto per fare un esempio, mettiamo una EditText, una TextView ed un Button. Procediamo.
Ho scelto e consiglio di usare il RelativeLayout perchè tramite gli attributi below, above, toRightOf ecc. permette di facilitare la gestione del posizionamento della varie Views. C'è ben poco da commentare. La TextView avrà una distanza dal margine superiore di 10dp e altrettanto dal margine sinistro. Il font scelto è il sans-serif-light, molto bello, elegante e minimale e le dimensioni del testo ammontano a 17sp. La EditText oltre al margine deve essere centrata orizzontalmente e deve stare sotto (below) la TextView. Infine, il Button occuperà tutto lo spazio disponibile in larghezza (fill_parent) e starà sotto la EditText. Il nostro layout XML è finito qui. Torniamo alla classe Dialoghi.
Dobbiamo ora "infilare" il layout poc'anzi creato nel dialogo e per questo si usa la classe LayoutInflater che come dice il nome stesso consente di infilare i layout. Istanziamo l'oggetto sempre nel metodo mostra facendo