10 Stimmen

Benutzerdefinierter Warndialog erhält unerwünschte Füllung

Ich habe versucht, eine benutzerdefinierte Alarm-Dialog zu machen und es funktioniert meist sehr gut. die Funktionalität funktioniert perfekt, aber die Ansicht verhält sich auf eine seltsame Weise. Das Dialog-Layout besteht aus einer Schaltfläche und einem listview. wie Sie im Screenshot unten sehen die Schaltfläche ist immer ein Rand oben und unten.

Ich sehe keinen Grund für diese Spannen und wäre für Hilfe sehr dankbar :)

Aus irgendeinem Grund kann ich mein Xml-Layout nicht posten, aber ich kann Ihnen versichern, dass es keine Abstände oder Ränder jeglicher Art enthält

Java Code :

View dialogView = ((LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.choose_catagory_dialog_layout, null, false);
Button footerButton = (Button) dialogView.findViewById(R.id.choose_catagory_dialog_footer_button);
footerButton.setOnClickListener(ButtonClickEvent);

builder = new AlertDialog.Builder(mContext);
builder.setView(dialogView);
builder.setTitle(R.string.choose_catagory);

builder.setAdapter(spinnerAdapter, ListclickEvent);
alert = builder.create();
alert.getListView().setVerticalFadingEdgeEnabled(false);
alert.setOwnerActivity((Activity) mContext);

Screenshot:

http://cl.ly/3S2y3p3E0e3H2o1I272m

20voto

pcans Punkte 7591

Das CustomPanel einer AlertDialog hat oben und unten eine Polsterung von 5dp. Sie können diese mit überschreiben:

alert.setView(dialogView, 0, 0, 0, 0);

11voto

Chase Punkte 11101

Für mich schien es, dass builder.setView(dialogView, 0, 0, 0, 0); wird eingestellt auf @hide und nicht verfügbar. Letztendlich musste ich das Padding der übergeordneten Ansicht meiner benutzerdefinierten Ansicht festlegen, nachdem ich show()

Zum Beispiel:

// Inflate custom dialog view
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
CustomDialogView dialogView = (CustomDialogView)inflater.inflate(R.layout.dialog_view, null);

// Create and show custom alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.dialog_title);
builder.setView(dialogView);
builder.setPositiveButton(R.string.dialog_ok, this);
builder.setNegativeButton(R.string.dialog_cancel, this);
builder.show();

// Remove padding from parent
ViewGroup parent = (ViewGroup)dialogView.getParent();
parent.setPadding(0, 0, 0, 0);

2voto

Gal Rom Punkte 5833

Hier ist der Code, der Ihnen die volle Kontrolle über die Dialogansicht gibt:

final Dialog dlg = new Dialog(this);
View action_layout = ((LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE)).inflate(R.layout.contacts_action, null);
dlg.requestWindowFeature(Window.FEATURE_NO_TITLE);  
Window window = dlg.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.FILL_HORIZONTAL;
window.setAttributes(wlp);
dlg.setCancelable(true);
dlg.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dlg.setContentView(action_layout);
dlg.show();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X