Die Methode setView() der AlertDialog-Klasse ermöglicht die Angabe einer benutzerdefinierten Ansicht für das Dialogfeld. Gibt es Einschränkungen hinsichtlich der Steuerelemente, die in dieser benutzerdefinierten Ansicht enthalten sein können?
Die setView()
Methode in AlertDialog.Builder nimmt jede Klasse von View erweitert (siehe es Unterklassen und deren Unterklassen).
Das bedeutet EditTexte, Buttons usw. Aber auch Layouts, die von viewGroups ausgehen.
Auch, wenn wir eine benutzerdefinierte Ansicht einstellen, können wir noch Schaltflächen mit setPositiveButton, setNegativeButton usw. hinzufügen?
Ja, es betrifft nur den Körper. Schaltflächen werden unterhalb des Layouts hinzugefügt.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog
// layout
builder.setView(inflater.inflate(R.layout.YourLayout, null))
.setPositiveButton(AlertDialog.BUTTON_NEGATIVE, "Yes!",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
//
}
})
.setNegativeButton(AlertDialog.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
LoginDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
UPDATE:
Diese Antwort scheint vor ein paar neue Aktivität seit 2 Jahren zu erhalten und einige Dinge haben sich geändert.
Ich aktualisierte den Code ein wenig, um die Formatierung zu verbessern, und fügte den folgenden Tipp aufgrund des aktuellen Stands der Best Practices hinzu.
Der AlertDialog definiert den Stil und die Struktur für Ihren Dialog, aber Sie sollten ein DialogFragment als Container für Ihren Dialog verwenden. Die DialogFragment-Klasse stellt alle Steuerelemente bereit, die Sie zum Erstellen Ihres Dialogfelds und zum Verwalten seiner Darstellung benötigen, anstatt Methoden für das Dialog-Objekt aufzurufen.
Das obige Beispiel ist gemeint, wenn Sie DialogFragment erweitern und einen AlertDialog in der onCreateDialog() - Callback-Methode erstellen.
Ich versuche, deine Antwort hier zu folgen. Wenn ich jedoch die Zeile 'LayoutInflater inflater = getLayoutInFlater() 'betrete, bekomme ich immer eine Fehlermeldung, dass der Methodenaufruf einen ** Bundle ** -Parameter erfordert. Ich habe versucht, den savedInstanceState von den onCreateDialog-Parametern zu verwenden, aber das verursachte neue Fehler. – Brian
Sie befinden sich wahrscheinlich in einem Fragment und benötigen 'getActivity(). GetLayoutInflater()' oder 'LayoutInflater.from (getActivity())' – Timmetje