2011-03-16 18 views
10

He intentado crear un cuadro de diálogo de alerta personalizado y, en general, funciona muy bien. la funcionalidad funciona a la perfección pero la vista se comporta de una manera extraña. El diseño del diálogo consiste en un botón y una vista de lista. como verá en la captura de pantalla siguiente, el botón obtiene un margen en la parte superior e inferior.diálogo de alerta personalizado obteniendo relleno no deseado

no veo ninguna razón para que estos márgenes, y apreciaría mucho un poco de ayuda :)

por alguna razón no puedo publicar mi diseño xml, pero les puedo asure que no contiene rellenos o los márgenes de cualquier tipo

Código 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); 

Captura de pantalla:

http://cl.ly/3S2y3p3E0e3H2o1I272m

Respuesta

19

El CustomPanel de AlertDialog tiene un relleno superior e inferior de 5dp. Puede anular estas usando:

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

bien, pero este es el método de la clase AlertDialog y no AlertDialog.builder, entonces, ¿cómo invocar ese método? –

+0

Forma parte de AlertDialog.builder: http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setView(android.view.View) Deberías reemplazar tu cuarta línea con lo pcans tiene arriba. – Sorean

+0

como se indica en el documento vinculado, el método setView() de AlertDialog.builder es setView (Ver) Aunque AlertDialog contiene el método setView (View, int, int, int, int). ¿Cómo accedo a este método desde AlertDialog.builder? –

10

Para mí, parecía que builder.setView(dialogView, 0, 0, 0, 0); se establece en @hide y no está disponible. Al final, tuve que establecer el relleno de los padres de mi vista personalizada después de llamar show()

Por ejemplo:

// 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

Por alguna razón, el relleno permanece. Alguien tiene una mejor solución? – Randalfien

2

Aquí está el código que le dará un control total sobre el punto de vista de diálogo:

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(); 
Cuestiones relacionadas