AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
Ich verwende den obigen Code, um einen Warnungsdialog anzuzeigen. Standardmäßig wird der Bildschirm in der Breite und der Inhalt in der Höhe umwickelt.
Wie kann ich die Breite und Höhe des Standardalarmdialogs steuern?
Ich habe es versucht:
alert.getWindow().setLayout(100,100); // It didn't work.
Wie kann ich die Layout-Parameter im Warnfenster abrufen und die Breite und Höhe manuell einstellen?
height
undwidth
welche Unterstützung für alle Geräte.Ok, ich kann die Breite und Höhe mit der Builder-Klasse steuern. ich benutzte
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setView(layout); builder.setTitle("Title"); AlertDialog alertDialog = builder.create(); alertDialog.getWindow().setLayout(600, 400); //Controlling width and height. alertDialog.show();
quelle
Bevor Sie versuchen, die Größe nach dem Layout anzupassen, überprüfen Sie zunächst, welchen Stil Ihr Dialogfeld verwendet. Stellen Sie sicher, dass nichts im Stilbaum festgelegt ist
<item name="windowMinWidthMajor">...</item> <item name="windowMinWidthMinor">...</item>
In diesem Fall ist es genauso einfach, dem [Builder-Konstruktor, der eine themeResId aufnimmt] ( http://developer.android.com/reference/android/app/AlertDialog.Builder.html#AlertDialog.Builder) Ihren eigenen Stil zuzuweisen (android.content.Context , int)) verfügbare API 11+
<style name="WrapEverythingDialog" parent=[whatever you were previously using]> <item name="windowMinWidthMajor">0dp</item> <item name="windowMinWidthMinor">0dp</item> </style>
quelle
Für diejenigen, die diesen Thread wie mich finden, gibt es hier eine bessere IMO-Lösung (beachten Sie die 70%, mit denen die minimale Breite des Dialogfelds in Prozent der Bildschirmbreite festgelegt wird):
<style name="my_dialog" parent="Theme.AppCompat.Dialog.Alert"> <item name="windowMinWidthMajor">70%</item> <item name="windowMinWidthMinor">70%</item> </style>
Wenden Sie diesen Stil dann auf den Dialog an:
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.my_dialog);
quelle
Dies funktioniert auch durch Hinzufügen von
.getWindow().setLayout(width, height)
aftershow()
alertDialogBuilder .setMessage("Click yes to exit!") .setCancelable(false) .setPositiveButton("Yes",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { // if this button is clicked, close // current activity MainActivity.this.finish(); } }) .setNegativeButton("No",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { // if this button is clicked, just close // the dialog box and do nothing dialog.cancel(); } }).show().getWindow().setLayout(600,500);
quelle
Wenn Sie eine dynamische Breite und Höhe basierend auf Ihrem Geräterahmen hinzufügen möchten, können Sie diese Berechnungen durchführen und die Höhe und Breite zuweisen.
AlertDialog.Builder builderSingle = new AlertDialog.Builder(getActivity()); builderSingle.setTitle("Title"); final AlertDialog alertDialog = builderSingle.create(); alertDialog.show(); Rect displayRectangle = new Rect(); Window window = getActivity().getWindow(); window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle); alertDialog.getWindow().setLayout((int)(displayRectangle.width() * 0.8f), (int)(displayRectangle.height() * 0.8f));
PS: Zeigen Sie zuerst den Dialog an und versuchen Sie dann, die Layoutattribute des Fensters zu ändern
quelle
Ich weiß nicht, ob Sie die Standardhöhe / -breite von AlertDialog ändern können, aber wenn Sie dies möchten, können Sie dies tun, indem Sie Ihren eigenen benutzerdefinierten Dialog erstellen. Sie müssen nur
android:theme="@android:style/Theme.Dialog"
die android manifest.xml für Ihre Aktivität angeben und können das gesamte Layout gemäß Ihren Anforderungen schreiben. Sie können die Höhe und Breite Ihres benutzerdefinierten Dialogfelds im Android Resource XML festlegen.quelle
Schätzen Sie die Antwort von Sid, weil es dynamisch ist, aber ich möchte etwas hinzufügen.
Was ist, wenn Sie nur die Breite ändern möchten? Die Höhe bleibt unverändert.
Ich habe Folgendes getan:
// All process of AlertDialog AlertDialog alert = builder.create(); alert.show(); // Creating Dynamic Rect displayRectangle = new Rect(); Window window = getActivity().getWindow(); window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle); alert.getWindow().setLayout((int) (displayRectangle.width() * 0.8f), alert.getWindow().getAttributes().height);
Hier habe ich
alert.getWindow().getAttributes().height
die Höhe beibehaltenAlertDialog
und sieWidth
wird gemäß der Bildschirmauflösung geändert.Hoffe es wird helfen. Vielen Dank.
quelle
longButton.setOnClickListener { show( "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1234567890-12345678901234567890123456789012345678901234567890" ) } shortButton.setOnClickListener { show( "1234567890\n" + "1234567890-12345678901234567890123456789012345678901234567890" ) }
private fun show(msg: String) { val builder = AlertDialog.Builder(this).apply { setPositiveButton(android.R.string.ok, null) setNegativeButton(android.R.string.cancel, null) } val dialog = builder.create().apply { setMessage(msg) } dialog.show() dialog.window?.decorView?.addOnLayoutChangeListener { v, _, _, _, _, _, _, _, _ -> val displayRectangle = Rect() val window = dialog.window v.getWindowVisibleDisplayFrame(displayRectangle) val maxHeight = displayRectangle.height() * 0.6f // 60% if (v.height > maxHeight) { window?.setLayout(window.attributes.width, maxHeight.toInt()) } } }
quelle
Ich denke, die Antwort von tir38 ist die sauberste Lösung. Denken Sie daran, dass Ihr Stil so aussehen sollte, wenn Sie android.app.AlerDialog- und Holo-Themen verwenden
<style name="WrapEverythingDialog" parent=[holo theme ex. android:Theme.Holo.Dialog]> <item name="windowMinWidthMajor">0dp</item> <item name="windowMinWidthMinor">0dp</item> </style>
Und wenn Sie support.v7.app.AlertDialog oder androidx.appcompat.app.AlertDialog mit AppCompat-Design verwenden, sollte Ihr Stil so aussehen
<style name="WrapEverythingDialog" parent=[Appcompat theme ex. Theme.AppCompat.Light.Dialog.Alert]> <item name="android:windowMinWidthMajor">0dp</item> <item name="android:windowMinWidthMinor">0dp</item> </style>
quelle