diff options
author | Rui Marinho <me@ruimarinho.net> | 2017-06-01 11:27:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-01 11:27:12 +0100 |
commit | 20d33c6ce21619b565a90af2ec4ca921581ff2b9 (patch) | |
tree | e9df9468402ac8d2eab9b5f0c0db77be27e144f9 /Xamarin.Forms.Platform.Android/AppCompat | |
parent | 07c85d17007e50f549248a192c04b0222e700b2e (diff) | |
download | xamarin-forms-20d33c6ce21619b565a90af2ec4ca921581ff2b9.tar.gz xamarin-forms-20d33c6ce21619b565a90af2ec4ca921581ff2b9.tar.bz2 xamarin-forms-20d33c6ce21619b565a90af2ec4ca921581ff2b9.zip |
Fix border on android buttons (#941)
* [Android] Add a button background tracker to handle background and border properties and be shared between button renderers
* [Android]Fix border radius dependency
* [Android] Make sure we always create or updated the background button tracker
Diffstat (limited to 'Xamarin.Forms.Platform.Android/AppCompat')
-rw-r--r-- | Xamarin.Forms.Platform.Android/AppCompat/ButtonRenderer.cs | 61 |
1 files changed, 19 insertions, 42 deletions
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/ButtonRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/ButtonRenderer.cs index 394f3325..81357fa6 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/ButtonRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/ButtonRenderer.cs @@ -1,14 +1,9 @@ using System; using System.ComponentModel; using Android.Content; -using Android.Content.Res; using Android.Graphics; -using Android.Graphics.Drawables; -using Android.Support.V4.Content; using Android.Support.V7.Widget; using Android.Util; -using Xamarin.Forms.Internals; -using GlobalResource = Android.Resource; using Object = Java.Lang.Object; using AView = Android.Views.View; using AMotionEvent = Android.Views.MotionEvent; @@ -19,6 +14,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat { public class ButtonRenderer : ViewRenderer<Button, AppCompatButton>, AView.IOnAttachStateChangeListener { + ButtonBackgroundTracker _backgroundTracker; TextColorSwitcher _textColorSwitcher; float _defaultFontSize; Typeface _defaultTypeface; @@ -27,6 +23,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat public ButtonRenderer() { + System.Diagnostics.Debug.WriteLine("Slow Button!"); AutoPackage = false; } @@ -83,6 +80,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat Control.Tag = null; _textColorSwitcher = null; } + _backgroundTracker?.Dispose(); } base.Dispose(disposing); @@ -111,8 +109,12 @@ namespace Xamarin.Forms.Platform.Android.AppCompat button.AddOnAttachStateChangeListener(this); } + if (_backgroundTracker == null) + _backgroundTracker = new ButtonBackgroundTracker(Element, Control); + else + _backgroundTracker.Button = e.NewElement; + UpdateAll(); - UpdateBackgroundColor(); } } @@ -139,42 +141,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat if (Element == null || Control == null) return; - Color backgroundColor = Element.BackgroundColor; - if (backgroundColor.IsDefault) - { - if (Control.SupportBackgroundTintList != null) - { - Context context = Context; - int id = GlobalResource.Attribute.ButtonTint; - unchecked - { - using (var value = new TypedValue()) - { - try - { - Resources.Theme theme = context.Theme; - if (theme != null && theme.ResolveAttribute(id, value, true)) -#pragma warning disable 618 - Control.SupportBackgroundTintList = Resources.GetColorStateList(value.Data); -#pragma warning restore 618 - else - Control.SupportBackgroundTintList = new ColorStateList(ColorExtensions.States, new[] { (int)0xffd7d6d6, 0x7fd7d6d6 }); - } - catch (Exception ex) - { - Internals.Log.Warning("Xamarin.Forms.Platform.Android.ButtonRenderer", "Could not retrieve button background resource: {0}", ex); - Control.SupportBackgroundTintList = new ColorStateList(ColorExtensions.States, new[] { (int)0xffd7d6d6, 0x7fd7d6d6 }); - } - } - } - } - } - else - { - int intColor = backgroundColor.ToAndroid().ToArgb(); - int disableColor = backgroundColor.MultiplyAlpha(0.5).ToAndroid().ToArgb(); - Control.SupportBackgroundTintList = new ColorStateList(ColorExtensions.States, new[] { intColor, disableColor }); - } + _backgroundTracker.UpdateBackgroundColor(); } void UpdateAll() @@ -184,6 +151,16 @@ namespace Xamarin.Forms.Platform.Android.AppCompat UpdateBitmap(); UpdateTextColor(); UpdateEnabled(); + UpdateBackgroundColor(); + UpdateDrawable(); + } + + void UpdateDrawable() + { + if (Element == null || Control == null) + return; + + _backgroundTracker?.UpdateDrawable(); } void UpdateBitmap() |