настраиваемое диалоговое окно предупреждения, получающее нежелательное дополнение

Я попытался создать собственный диалог предупреждений, и в основном он работает очень хорошо. функциональность работает отлично, но представление ведет себя странно. Макет диалога состоит из кнопки и списка. как вы увидите на скриншоте ниже, кнопка получает поля сверху и снизу.

я не вижу причин для этих полей, и я был бы очень признателен за помощь :)

по какой-то причине я не могу опубликовать свой 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


person Emil Sjölander    schedule 16.03.2011    source источник


Ответы (3)


CustomPanel AlertDialog имеет верхнее и нижнее заполнение 5dp. Вы можете переопределить их, используя:

alert.setView(dialogView, 0, 0, 0, 0);
person pcans    schedule 16.03.2011
comment
хорошо, но это метод класса AlertDialog, а не AlertDialog.builder , так как же вызвать этот метод? - person Emil Sjölander; 16.03.2011
comment
Это часть AlertDialog.builder: developer.android.com/reference/android/app/ Вы должны заменить 4-ю строку тем, что указано выше в pcans. - person Sorean; 16.03.2011
comment
как указано в связанном документе, метод setView() для AlertDialog.builder - это setView(View) Хотя AlertDialog содержит метод setView(View,int,int,int,int) . как мне получить доступ к этому методу из AlertDialog.builder? - person Emil Sjölander; 16.03.2011
comment
глупо с моей стороны, забудьте этот последний вопрос. большое спасибо за вашу помощь! - person Emil Sjölander; 16.03.2011
comment
Похоже, это не работает на устройствах с HTC Sense, отступы все еще там. - person Daniel Novak; 21.12.2011
comment
Единственный способ сделать это — вызвать AlertDialog.Builder.create() для получения экземпляра AlertDialog. - person mxcl; 07.03.2012
comment
@JKM, вы уверены, что это часть AlertDialog.builder? Ссылка, которую вы предоставили, также не поддерживает ваш аргумент. - person Gunhan; 05.12.2012
comment
Я разместил ответ более года назад, он, вероятно, уже устарел и нуждается в обновлении. К сожалению, я больше не занимаюсь Android-разработкой активно. - person Sorean; 06.12.2012
comment
Спасибо, моя старая ошибка исправлена. setview(View, int, int, int, int) должен вызываться для объекта оповещения, а не для построителя. - person pcans; 10.01.2013

Мне показалось, что 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);
person Chase    schedule 09.01.2012
comment
Прокладка почему-то осталась. У кого-нибудь есть лучшее решение? - person Randalfien; 02.04.2012

Вот код, который даст вам полный контроль над диалоговым окном:

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();
person Gal Rom    schedule 14.01.2015