我正在尝试使用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)
我该怎样做才能摆脱边界?
答案 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");