Xamarin Android DatePicker 禁用文本颜色

Xamarin Android DatePicker Disabled Text Color

在我的 Xamarin Forms 应用程序中,我有一个可以显示为已禁用的 DatePicker。在 Android,当 DatePicker 被禁用时,DatePicker 将文本呈现为黑色。由于背景较暗,我想将该颜色更改为灰色。

我在我的自定义渲染器中尝试了很多方法,但我一直无法弄清楚。我什至试过 ColorStateList 无济于事。我无法在样式中设置它,因为背景颜色可以在明暗之间变化。

禁用 DatePicker 时更改日期字段颜色的正确方法是什么?

您可以使用 Custom Renderer 并覆盖 OnElementPropertyChanged 来随时更改文本颜色 IsEnabled 被切换。

Android 自定义渲染器

using Android.Content;

using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

using CustomDatePicker.Droid;

[assembly: ExportRenderer(typeof(Picker), typeof(DisabledDatePickerRenderer))]
namespace CustomDatePicker.Droid
{
    public class DisabledDatePickerRenderer : DatePickerRenderer
    {
        public DisabledDatePickerRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (e.PropertyName.Equals(nameof(Element.IsEnabled)) && Control != null)
            {
                if (Element.IsEnabled)
                {
                    //Set the text color when the DatePicker is enabled
                    Control.SetTextColor(Android.Graphics.Color.Black);
                }
                else
                {
                    //Set the text color when the DatePicker is disabled
                    Control.SetTextColor(Android.Graphics.Color.Gray);
                }
            }
        }
    }
}

一个更现代的解决方案是使用 AppThemeBinding extension 允许实时响应应用程序主题更改。您还可以在代码隐藏中使用它,例如在自定义渲染器中,使用 SetAppThemeColor() 扩展方法。