日期选择器对话框阴影的白色背景

white background for date picker dialog shadow

我将日期选择器添加到我的应用程序,但我的问题是对话框的阴影有白色背景,请使用 Android 21 进行编译。

请帮我去掉白色背景...

您的 themes.xmlstyles.xml 中有一个 "bug" material 设计支持库无法与对话框一起正常工作。

所以删除特定的对话框代码或将其分开在不同的版本中。


尝试进一步解释。

通常当我们扩展原始应用程序主题时,我们在 values 文件夹下有一个 themes.xml and/or styles.xml 文件。在那里的代码中你会发现类似这样的东西:

应用主题:

<style name="MyTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <!-- ... other styling values ...  -->

    <!-- Dialog attributes -->
    <item name="dialogTheme">@style/MyTheme.Dialog</item>
    <!-- AlertDialog attributes -->
    <item name="alertDialogTheme">@style/MyTheme.Dialog</item>

    <!-- ... other styling values ...  -->
</style>

自定义对话框主题:

<style name="MyTheme.Dialog" parent="@style/Theme.AppCompat.Light.Dialog">
    <!-- some styling values here -->
</style>

需要定制的是MyTheme.Dialogparent这个Theme.AppCompat.Light.Dialog没有适用于所有 android 版本它可能适用于 Lollipop 但不适用于 KitKat,反之亦然。

  • 通过在每个平台上简单地 运行 应用程序,您可以轻松地找出它适用于哪个版本。
  • 然后您可以为 values-v21 创建一个不同的文件夹并相应地定义对话框的父级,以便它适用于两个版本。

您可以应用一些其他关于样式自定义的解决方法,以使其起作用。

如果您想进一步研究或主题定制想法,请查看 android theme.xml here.

的来源

我遇到了同样的问题,

我完成的第一个解决方案:
我最终在 DatePickerDialog 构建器中给出了这个主题。重要的是 windowBackground 设置为透明。

<style name="Theme.Yp.DatePicker" parent="@android:style/Widget.DeviceDefault.DatePicker">
        <item name="android:textColor">@color/color_accent</item>
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:gravity">center</item>
    </style>

第二个也是最后一个解决方案:
我通过使用工作正常的 DatePickerDialog.THEME_DEVICE_DEFAULT_LIGHT 来完成。我们没有使用很多样式,所以还可以。

在默认样式中添加新样式(不是 style-21)

 <style name="Your style" parent="@android:style/Widget.DeviceDefault.DatePicker">
 <item name="android:textColor">@color/app__primary_color</item>
 <item name="android:windowBackground">@android:color/transparent</item>
 <item name="android:gravity">center</item>
 <item name="android:layout_gravity">center</item>
DatePickerDialog dialog = new DatePickerDialog(mContext, android.R.style.Theme_Holo_Light_Dialog_NoActionBar, mDateSetListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE));
dialog.getWindow().setBackgroundDrawableResource(R.color.transparency);
dialog.show();

可能会迟到,但会有所帮助。

您必须为对话框添加透明背景。执行此操作的方法如下:

DatePickerDialog dpd = new DatePickerDialog(this, android.R.style.Theme_Holo_Dialog, reservationDate, 2014, 1, 1)
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    }
};

对我来说,将 window 背景设置为透明没有帮助,这使得 all 我的 datePicker 对话框不仅丑陋的边框透明..: (

对我有帮助的是将常规背景也设置为我想要的颜色,并将 window背景设置为透明。 这是我的风格:

 <style name="pickerDialogDark" parent="Theme.AppCompat.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:background">?attr/dialogBackground</item>
        <item name="android:textColor">@color/colorSimpleGreen</item>
        <item name="colorAccent">@color/colorGreen</item>
        <item name="colorPrimaryDark">@color/colorBlack</item>
        <item name="android:textColorSecondary">@color/colorSimpleGreen</item>
        <item name="android:headerBackground">?attr/dialogBackground</item>
    </style>