2011-03-16 87 views
10

我试图做一个自定义提醒对话框,它大多工作得很好。该功能完美运行,但视图以怪异的方式运行。对话框布局由一个按钮和一个列表视图组成。正如你在下面的屏幕截图中看到的那样,按钮的顶部和底部都有一个边距。自定义警报对话框变得不必要的填充

我没有看到任何理由为这些边距,我将不胜感激一些帮助:)

出于某种原因,我不能发布我的XML布局,但我可以可以确定地告诉你,它不包含任何形式的垫衬或利润

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); 

截图:

http://cl.ly/3S2y3p3E0e3H2o1I272m

回答

19

AlertDialog的CustomPanel具有5dp的顶部和底部填充。您可以使用这些替代:

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

好的,但这是AlertDialog类的方法,而不是AlertDialog.builder,所以如何调用该方法? – 2011-03-16 18:25:33

+0

它是AlertDialog.builder的一部分: http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setView(android.view.View) 你会用你的第4行代替pcans有以上。 – Sorean 2011-03-16 18:28:59

+0

如链接文档中所述,AlertDialog.builder的setView()方法是setView(View),尽管AlertDialog包含方法setView(View,int,int,int,int)。如何从AlertDialog.builder访问此方法? – 2011-03-16 18:34:34

10

对于我来说,它似乎是builder.setView(dialogView, 0, 0, 0, 0);设置为@hide和不可用。最后,我只好打电话show()

例如后设置我的自定义视图的父的填充:

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

由于某种原因填充仍然存在。任何人有更好的解决方案 – Randalfien 2012-04-01 20:34:57

2

这里是代码,这将使你在对话视图完全控制:

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