2016-11-24 5 views
2

Мне нужно программно определить значения цвета темы по умолчанию (например, windowBackground, colorPrimary). Я выполняю код из Activity. Мой целевой андроид API - 21. Я использую Theme.Material theme. Я пробовал:Как получить цвет из текущей темы программно в Android (Xamarin)

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

с различным идентификатором ресурса, но я всегда получаю значение Android.Util.DataType.Null.

+0

вы проверили мой ответ ?? – Ironman

ответ

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

+0

Спасибо. Я видел то, чего не хватало. Вашему коду необходимы некоторые улучшения для получения фактического цвета: _var windowBackgroundDrawable = Application.Context.GetDrawable (a.ResourceId); var windowBackgroundColor = ((Android.Graphics.Drawables.ColorDrawable) windowBackgroundDrawable) .Color; _ Не могли бы вы добавить его в свое решение? – Kalitsov

+0

@ Калицов Я обновил, вы можете отметить, как принять ответ, чтобы он помог другим. – Ironman

+0

Да, из-за причины. Пожалуйста, обновите второй фрагмент. Это может быть последовательным. – Kalitsov