2011-03-16 3 views
10

J'ai essayé de créer une boîte de dialogue d'alerte personnalisée et cela fonctionne très bien. la fonctionnalité fonctionne parfaitement mais la vue se comporte bizarrement. La disposition du dialogue se compose d'un bouton et d'une liste. Comme vous le verrez dans la capture d'écran ci-dessous, le bouton obtient une marge en haut et en bas.boîte de dialogue d'alerte personnalisée pour obtenir un remplissage indésirable

je ne vois aucune raison de ces marges, et je serais très heureux de l'aide :)

pour une raison que je ne peux pas poster ma mise en page XML, mais je peux vous asure qu'il ne contient pas rembourrages ou des marges de toute nature

code Java:

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

Répondre

19

Le CustomPanel d'un AlertDialog a un rembourrage supérieur et inférieur de 5dp. Vous pouvez remplacer ces utilisant:

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

ok mais c'est la méthode de la classe AlertDialog et non AlertDialog.builder, alors comment appeler cette méthode? –

+0

Il fait partie de AlertDialog.builder: http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setView(android.view.View) Vous souhaitez remplacer votre 4ème ligne par ce que pcans a ci-dessus. – Sorean

+0

comme indiqué dans le document lié, la méthode setView() de AlertDialog.builder est setView (View) Bien que AlertDialog contienne la méthode setView (View, int, int, int, int). Comment accéder à cette méthode depuis AlertDialog.builder? –

10

Pour moi, il semblait que builder.setView(dialogView, 0, 0, 0, 0); est réglé sur @hide et non disponible. En fin de compte, je devais mettre le rembourrage de mon parent de vue personnalisée après avoir appelé show()

Par exemple:

// 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); 
+0

Pour une raison quelconque, le rembourrage reste. Quelqu'un a une meilleure solution? – Randalfien

2

Voici le code qui vous donnera un contrôle total sur la vue dialogue:

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(); 
Questions connexes