2011-03-16 39 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();