Android DatePicker DialogFragment的自定义主题显示令人不快的边框

时间:2012-06-30 17:43:19

标签: android datepicker android-datepicker datepickerdialog

我正在尝试使用DialogFragment来托管Google推荐的日期选择器:http://developer.android.com/guide/topics/ui/controls/pickers.html

使用上面页面中的示例代码可以正常工作,但我希望能够为日期选择器对话框设置特定主题。

如果我从他们的示例中修改对话框片段中的OnCreateDialog方法,那么它返回一个具有特定主题的日期选择器

...
// Create a new instance of DatePickerDialog and return it
DatePickerDialog dlg = new DatePickerDialog(getActivity(),
   Android.R.style.Theme_DeviceDefault_Light_Dialog, this, year, month, day); 
return dlg;
...

(即只使用DatePickerDialog的其他构造函数,您可以在其中提供主题) 显示时,我的日期选择器周围出现了一个丑陋的不透明边框:

(截图:http://i.stack.imgur.com/WO1YD.png

我该怎样做才能摆脱边界?

2 个答案:

答案 0 :(得分:3)

这可能有点旧,但至少我会在这里回答,以防其他人发现这个问题。
我相信你可以找到答案here,在另一个堆栈溢出问题中(可能是重复的,但不知道如何将其标记为一个)。

答案是这样设置窗口背景:
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

希望它有所帮助。

答案 1 :(得分:2)

我知道这已经是一年前了,但也许别人需要解决这个问题的方法。昨天我遇到了同样的问题,我用一个小的解决方法解决了它。我创建了自己的DatePickerDialog而不是android提供的。

以下是代码:

dialog_date_picker.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">

<DatePicker
        android:id="@+id/dlgDatePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:spinnersShown="true"
        android:calendarViewShown="false"/>

<View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="@android:color/darker_gray"/>

<Button
        android:id="@+id/dlgDatePickerBtnDone"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/dlg_date_picker_button"
        />

</LinearLayout>

DialogDatePicker.java

public class DialogDatePicker extends DialogFragment {

private DatePicker dp;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.dialog_date_picker, container);
    dp = (DatePicker) view.findViewById(R.id.dlgDatePicker);
    view.findViewById(R.id.dlgDatePickerBtnDone).setOnClickListener(setDate);
    getDialog().setTitle(R.string.dlg_date_picker_title);
    return view;
}

private View.OnClickListener setDate = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        int dayOfMonth = dp.getDayOfMonth();
        int monthOfYear = dp.getMonth()+1; //0 = jan, 1 = feb, ...
        int year = dp.getYear();

        String date = String.format(Locale.GERMANY,"%s.%s.%s", dayOfMonth, monthOfYear, year);
        ((TextView) getActivity().findViewById(R.id.route_setting_date))
                .setText(date);

        dismiss();
    }
};

}

最后是新主题的调用

DialogDatePicker ddp = new DialogDatePicker();
ddp.setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Holo_Dialog);
ddp.show(getFragmentManager(),"DialogDatePicker");