summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android/AppCompat
diff options
context:
space:
mode:
authorRui Marinho <me@ruimarinho.net>2017-06-01 11:27:12 +0100
committerGitHub <noreply@github.com>2017-06-01 11:27:12 +0100
commit20d33c6ce21619b565a90af2ec4ca921581ff2b9 (patch)
treee9df9468402ac8d2eab9b5f0c0db77be27e144f9 /Xamarin.Forms.Platform.Android/AppCompat
parent07c85d17007e50f549248a192c04b0222e700b2e (diff)
downloadxamarin-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.cs61
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()