Creazione di alertDialog personalizzati in Android con livello API inferiore a 8
-
28-10-2019 - |
Domanda
Dalla documentazione ufficiale:
Una sottoclasse di finestra di dialogo che può visualizzare uno, due o tre pulsanti. Se si desidera visualizzare solo una stringa in questa finestra di dialogo, utilizzare il metodo setMessage (). Se si desidera visualizzare una vista più complessa, cerca il framelayout chiamato "personalizzato" e aggiungi la tua vista:
FrameLayout fl = (FrameLayout) findViewById(android.R.id.custom);
fl.addView(myView, new LayoutParams(MATCH_PARENT, WRAP_CONTENT));
Ma il problema è che Android.r.id.custom si presenta solo a livello di OS da 8 API.
Come posso creare un alertDialog personalizzato se lavoro con meno livello API?
Soluzione
In realtà quello che fai è il seguente:
Innanzitutto, crei personalizzato_layout.xml in res/layout. Quindi aggiungerai il codice successivo alla tua attività
Dialog myDialog = new Dialog(this);
myDialog .setOwnerActivity(MyParentActivity.this);
myDialog .setContentView(R.layout.custom_layout);
myDialog .setTitle("title");
E puoi mostrarlo e respingerlo usandomyDialog.show();
e myDialog.dismiss();
Se hai pulsanti o altre viste all'interno del tuo personalizzato
Button myButton = (Button) myDialog.findViewById(R.id.myButton);
Spero che questo aiuti.
Altri suggerimenti
Per la visualizzazione di titoli in un'app su cui sto lavorando, ho creato una nuova classe che estende la finestra di dialogo e ho usato setContentView () per visualizzare il mio layout personalizzato. A seconda delle tue esigenze (non hai detto esattamente perché avevo Per essere un alertDialog), questo può funzionare anche per te.
Questo può essere in qualche modo soggettivo, ma per salvare un po 'di sanità mentale, potresti voler tenere conto della distribuzione della versione Android corrente quando si sceglie un'API target. Secondo quanto segue Distribuzione della piattaforma, solo il 10,2% dei dispositivi Android utilizza un livello API inferiore a 8, con solo circa l'86% utilizzando i livelli di API 8-10.