2017-01-26 7 views
0

Моя тема:resolveAttribute всегда возвращает значение NULL для атрибутов

<style name="AppThemeDark" parent="Theme.AppCompat"> 
    <item name="AppButton">@drawable/standard_dark_button_selector</item> 
</style>  

Этот код я использую, чтобы получить тематические вытяжке:

public static Drawable getThemedDrawable(Context context, int resource) { 
    TypedValue typedValue = new TypedValue(); 
    Resources.Theme theme = context.getTheme(); 
    theme.resolveAttribute(resource, typedValue, true); 
    if(typedValue.resourceId == 0) { 
     return context.getResources().getDrawable(R.drawable.standard_theme_not_found); 
    } 
    else 
     return context.getResources().getDrawable(typedValue.resourceId); 
} 

И это прямой вызов:

positive.setBackgroundDrawable(Theme.getThemedDrawable(getBaseContext(), R.attr.AppButton)); 

Файл typedValue.resourceId всегда равен 0 и не возвращает никакого действительного идентификатора ресурса, в этом случае он всегда возвращает R.drawable.standard_theme_not_f ound.

Когда я использую этот код с цветами (исходящими из typedValue.data), он заполняется и работает.

Как я могу это решить?

ответ

-1

Я нашел ответ сам, его важно, что тема правильно установлена ​​в контексте.

если применить тему программно:

setTheme(myTheme); 

тогда тема не сохраняется в getBaseContext()

поэтому вам нужно использовать

Theme.getThemedDrawable(myActivity, R.attr.AppContainer1Background) 

вместо

Theme.getThemedDrawable(getBaseContext(), R.attr.AppContainer1Background)