diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2016-04-19 01:01:58 -0600 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-04-19 00:01:58 -0700 |
commit | a98f3fb2aae3c5b6a3fa5140e51f51ec67843a49 (patch) | |
tree | 654fa47cbd3cc889061466939630dcd5133cc837 /Xamarin.Forms.Platform.Android/Renderers | |
parent | 89a50d4bc1f4aaf83d5f92a28c2a7a96282cc0d3 (diff) | |
download | xamarin-forms-a98f3fb2aae3c5b6a3fa5140e51f51ec67843a49.tar.gz xamarin-forms-a98f3fb2aae3c5b6a3fa5140e51f51ec67843a49.tar.bz2 xamarin-forms-a98f3fb2aae3c5b6a3fa5140e51f51ec67843a49.zip |
Add TextColor Property to Picker, TimePicker, DatePicker (#84)
* Add TextColor property to TimePicker
Add TextColor page to TimePicker gallery
Add TimePicker color toggling to color toggle test page
Split color toggle tests up among tabs
* Implement TimePicker.TextColor in iOS
* Implement TimePicker.TextColor for WinRT tablet
* Add IsEnabled=false tests to DefaultColorToggleTest Button and TimePicker
Consolidate ColorStates array
Fix IsEnabled changing color bug on iOS
* Implement TimePicker.TextColor for WP8
* Add TextColor property to DatePicker
Add DatePicker section to DefaultColorToggleTest
Impement DatePicker.TextColor for WP8
* Implement DatePicker.TextColor for WinRT/UWP/Windows Phone 8.1
* Implement DatePicker.TextColor for iOS
* Add TextColor to DatePicker Gallery Page
* Implement DatePicker.TextColor for Android
* Add Picker Gallery page for TextColor
Implement Picker.TextColor on Android
Consolidate TextColor management for Button, Picker, DatePicker, TimePicker
Implement
* Add untracked TextColorSwitcher
Implement Picker.TextColor in iOS
* Implement Picker.TextColor in WinRT/UWP/Windows Phone 8.1
Remove Pioker Loaded handlers in Dispose
* Implement Picker.TextColor in WP8
* Removed unused field
Update ignored warnings
* Update docs
* Use nameof() for BindableProperties
* Cleanup
* Fix custom renderer crashes for classes using TextColorSwitcher
* Correct property name references
* Fix typo and 'if' formatting
* Add missing else
Diffstat (limited to 'Xamarin.Forms.Platform.Android/Renderers')
4 files changed, 43 insertions, 23 deletions
diff --git a/Xamarin.Forms.Platform.Android/Renderers/ButtonRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/ButtonRenderer.cs index 43f042b1..7247361a 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/ButtonRenderer.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/ButtonRenderer.cs @@ -13,7 +13,7 @@ namespace Xamarin.Forms.Platform.Android public class ButtonRenderer : ViewRenderer<Button, AButton>, AView.IOnAttachStateChangeListener { ButtonDrawable _backgroundDrawable; - ColorStateList _buttonDefaulTextColors; + TextColorSwitcher _textColorSwitcher; Drawable _defaultDrawable; float _defaultFontSize; Typeface _defaultTypeface; @@ -78,7 +78,7 @@ namespace Xamarin.Forms.Platform.Android button.SetOnClickListener(ButtonClickListener.Instance.Value); button.Tag = this; SetNativeControl(button); - + _textColorSwitcher = new TextColorSwitcher(button.TextColors); button.AddOnAttachStateChangeListener(this); } } @@ -255,22 +255,7 @@ namespace Xamarin.Forms.Platform.Android void UpdateTextColor() { - Color color = Element.TextColor; - - if (color.IsDefault) - { - if (_buttonDefaulTextColors == null) - return; - - NativeButton.SetTextColor(_buttonDefaulTextColors); - } - else - { - _buttonDefaulTextColors = _buttonDefaulTextColors ?? Control.TextColors; - - // Set the new enabled state color, preserving the default disabled state color - NativeButton.SetTextColor(color.ToAndroidPreserveDisabled(_buttonDefaulTextColors)); - } + _textColorSwitcher?.UpdateTextColor(Control, Element.TextColor); } class ButtonClickListener : Object, IOnClickListener diff --git a/Xamarin.Forms.Platform.Android/Renderers/DatePickerRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/DatePickerRenderer.cs index 11d9a0d0..5b0e0994 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/DatePickerRenderer.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/DatePickerRenderer.cs @@ -1,6 +1,7 @@ using System; using System.ComponentModel; using Android.App; +using Android.Content.Res; using Android.Widget; using AView = Android.Views.View; using Object = Java.Lang.Object; @@ -11,6 +12,7 @@ namespace Xamarin.Forms.Platform.Android { DatePickerDialog _dialog; bool _disposed; + TextColorSwitcher _textColorSwitcher; public DatePickerRenderer() { @@ -47,24 +49,28 @@ namespace Xamarin.Forms.Platform.Android textField.SetOnClickListener(TextFieldClickHandler.Instance); SetNativeControl(textField); + _textColorSwitcher = new TextColorSwitcher(textField.TextColors); } SetDate(Element.Date); UpdateMinimumDate(); UpdateMaximumDate(); + UpdateTextColor(); } protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); - if (e.PropertyName == "Date" || e.PropertyName == DatePicker.FormatProperty.PropertyName) + if (e.PropertyName == DatePicker.DateProperty.PropertyName || e.PropertyName == DatePicker.FormatProperty.PropertyName) SetDate(Element.Date); - else if (e.PropertyName == "MinimumDate") + else if (e.PropertyName == DatePicker.MinimumDateProperty.PropertyName) UpdateMinimumDate(); - else if (e.PropertyName == "MaximumDate") + else if (e.PropertyName == DatePicker.MaximumDateProperty.PropertyName) UpdateMaximumDate(); + if (e.PropertyName == DatePicker.TextColorProperty.PropertyName) + UpdateTextColor(); } internal override void OnFocusChangeRequested(object sender, VisualElement.FocusRequestArgs e) @@ -141,6 +147,11 @@ namespace Xamarin.Forms.Platform.Android } } + void UpdateTextColor() + { + _textColorSwitcher?.UpdateTextColor(Control, Element.TextColor); + } + class TextFieldClickHandler : Object, IOnClickListener { public static readonly TextFieldClickHandler Instance = new TextFieldClickHandler(); diff --git a/Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs index b9114d22..e9cc3942 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs @@ -2,19 +2,21 @@ using System; using System.ComponentModel; using System.Linq; using Android.App; +using Android.Content.Res; using Android.Views; using Android.Widget; using ADatePicker = Android.Widget.DatePicker; using ATimePicker = Android.Widget.TimePicker; using Object = Java.Lang.Object; +using Orientation = Android.Widget.Orientation; namespace Xamarin.Forms.Platform.Android { public class PickerRenderer : ViewRenderer<Picker, EditText> { AlertDialog _dialog; - bool _isDisposed; + TextColorSwitcher _textColorSwitcher; public PickerRenderer() { @@ -44,9 +46,11 @@ namespace Xamarin.Forms.Platform.Android { var textField = new EditText(Context) { Focusable = false, Clickable = true, Tag = this }; textField.SetOnClickListener(PickerListener.Instance); + _textColorSwitcher = new TextColorSwitcher(textField.TextColors); SetNativeControl(textField); } UpdatePicker(); + UpdateTextColor(); } base.OnElementChanged(e); @@ -60,6 +64,8 @@ namespace Xamarin.Forms.Platform.Android UpdatePicker(); if (e.PropertyName == Picker.SelectedIndexProperty.PropertyName) UpdatePicker(); + if (e.PropertyName == Picker.TextColorProperty.PropertyName) + UpdateTextColor(); } internal override void OnFocusChangeRequested(object sender, VisualElement.FocusRequestArgs e) @@ -148,6 +154,11 @@ namespace Xamarin.Forms.Platform.Android ((IVisualElementController)Element).NativeSizeChanged(); } + void UpdateTextColor() + { + _textColorSwitcher?.UpdateTextColor(Control, Element.TextColor); + } + class PickerListener : Object, IOnClickListener { public static readonly PickerListener Instance = new PickerListener(); diff --git a/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs index cfa676d0..010eda72 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs @@ -1,6 +1,7 @@ using System; using System.ComponentModel; using Android.App; +using Android.Content.Res; using Android.Widget; using ADatePicker = Android.Widget.DatePicker; using ATimePicker = Android.Widget.TimePicker; @@ -11,6 +12,7 @@ namespace Xamarin.Forms.Platform.Android public class TimePickerRenderer : ViewRenderer<TimePicker, EditText>, TimePickerDialog.IOnTimeSetListener { AlertDialog _dialog; + TextColorSwitcher _textColorSwitcher; public TimePickerRenderer() { @@ -36,17 +38,23 @@ namespace Xamarin.Forms.Platform.Android textField.SetOnClickListener(TimePickerListener.Instance); SetNativeControl(textField); + _textColorSwitcher = new TextColorSwitcher(textField.TextColors); } SetTime(e.NewElement.Time); + UpdateTextColor(); } protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); - if (e.PropertyName == TimePicker.TimeProperty.PropertyName || e.PropertyName == TimePicker.FormatProperty.PropertyName) + if (e.PropertyName == TimePicker.TimeProperty.PropertyName || + e.PropertyName == TimePicker.FormatProperty.PropertyName) SetTime(Element.Time); + + if (e.PropertyName == TimePicker.TextColorProperty.PropertyName) + UpdateTextColor(); } internal override void OnFocusChangeRequested(object sender, VisualElement.FocusRequestArgs e) @@ -78,6 +86,11 @@ namespace Xamarin.Forms.Platform.Android Control.Text = DateTime.Today.Add(time).ToString(Element.Format); } + void UpdateTextColor() + { + _textColorSwitcher?.UpdateTextColor(Control, Element.TextColor); + } + class TimePickerListener : Object, IOnClickListener { public static readonly TimePickerListener Instance = new TimePickerListener(); |