如何在Android(Xamarin)中以编程方式从当前主题中获取颜色

时间:2016-11-24 11:04:46

标签: android xamarin xamarin.android

我需要以编程方式获取一些默认主题颜色值(例如windowBackground,colorPrimary)。我正在执行活动中的代码。我的目标android API是21 。我正在使用Theme.Material theme。我试过了:

var attributeValue = new Android.Util.TypedValue();
this.Theme.ResolveAttribute(Resource.Attribute.colorPrimary, attributeValue, true)

具有不同的资源标识符,但我总是得到Android.Util.DataType.Null值。

1 个答案:

答案 0 :(得分:1)

使用我测试过的代码

WindowBackground

代码:

Android.Util.TypedValue a = new Android.Util.TypedValue();
Theme.ResolveAttribute(Android.Resource.Attribute.WindowBackground, a , true);
var windowBackgroundDrawable = Application.Context.GetDrawable(a.ResourceId);      
var windowBackgroundColor = ((Android.Graphics.Drawables.ColorDrawable)windowBackgroundD‌​rawable).Color;

输出我的案例是: FAFAFA

ColorPrimary使用此:

代码:

Android.Util.TypedValue a = new Android.Util.TypedValue();
Theme.ResolveAttribute(Android.Resource.Attribute.ColorPrimary, a , true);
var colorPrimarya = Application.Context.GetDrawable(a.ResourceId);      
var colorPrimary = ((Android.Graphics.Drawables.ColorDrawable) colorPrimarya).Color;

输出我的案例是: 0072BA