gpt4 book ai didi

android - 如何摆脱Android 4.4.4 中Android DatePickerDialog 的默认背景?

转载 作者:行者123 更新时间:2023-11-30 00:25:16 25 4
gpt4 key购买 nike

我有一个针对 API 25 并将 API 19 作为最低 SDK 的 Xamarin.Android 项目,在其中一个 Activity 中,当触摸按钮时,会出现以下 DatePickerDialog :

enter image description here

如您所见,我定义了一个带有圆角的自定义可绘制对象,并在 DatePickerDialog 中使用了它。 问题是,在 Android 4.4.4 设备 (API 19) 上运行我的应用程序时,我无法摆脱具有阴影边框的默认背景。

在 Android N 设备(API 25)上一切似乎都正常工作,这里是截图:

enter image description here

我想知道如何去除Android 4.4.4设备的默认背景,有没有有用的xml样式属性?或者也许是一个程序化的解决方案?我找不到任何讨论此问题的资源。

详情

DatePickerFragment 我正在使用的实现:

public class DatePickerFragment : Android.Support.V4.App.DialogFragment, 
Android.App.DatePickerDialog.IOnDateSetListener
{
public static readonly string TAG = "X:" + typeof(DatePickerFragment).Name.ToUpper();

Action<DateTime> _dateSelectedHandler = delegate { };

public static DatePickerFragment NewInstance(Action<DateTime> onDateSelected)
{
DatePickerFragment frag = new DatePickerFragment();
frag._dateSelectedHandler = onDateSelected;

return frag;
}

public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
DateTime currently = DateTime.Now;
DatePickerDialog dialog = new DatePickerDialog(Activity,
Resource.Style.MyDialogTheme,
this,
currently.Year,
currently.Month,
currently.Day);
dialog.SetTitle("");
return dialog;
}

public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
DateTime selectedDate = new DateTime(year, monthOfYear + 1, dayOfMonth);
_dateSelectedHandler(selectedDate);
}
}

应用于 DatePickerDialog 的样式

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@color/transparent</item>
<item name="android:windowFrame">@color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:background">@drawable/dialog_background</item>
<item name="android:datePickerStyle">@style/MyDatePicker</item>
<item name="android:backgroundDimEnabled">true</item>
</style>

dialog_background 可绘制

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<stroke android:width="3dp"
android:color="@color/white" />

<corners android:radius="10dp" />

<solid android:color="@color/white" />
</shape>

MyDatePicker 样式定义

<style name="MyDatePicker" parent="android:Widget.Material.DatePicker">
<item name="android:datePickerMode">spinner</item>
</style>

最佳答案

The issue is that I can't get rid of the default background that has a shadowed border when running my application on an Android 4.4.4 device(API 19).

On Android N device (API 25) everything seem to work properly.

似乎在您的 values\styles.xml 文件中, Material 设计支持库中的 Theme.AppCompat.Light.Dialog 主题无法与 一起正常工作DatePickerDialog.

您的 MyDialogTheme 父主题是 Theme.AppCompat.Light.Dialog, 也许这个主题不适用于所有 android 版本,它适用于 Lollipop 及更高版本,但不适用于 KitKat

要使其适用于两个版本,您可以这样做:

  • values-v21 创建一个不同的文件夹,将您的 MyDialogTheme 样式复制到 values-v21\styles.xml 文件,然后它将在 Android API 21+ 上正常工作。

  • 在您的 values\styles.xml 文件中,定义对话框的正确父级以确保它在 Android API 19 上正常工作。如果您复制 MyDialogTheme 样式到 values-v21\styles.xml 文件并删除 values\styles.xml 中的 MyDialogTheme 样式,对 Android API 19 的影响如 this ,也许这就是你想要达到的效果。

关于android - 如何摆脱Android 4.4.4 中Android DatePickerDialog 的默认背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45495778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com