2016-02-15 1 views
0

Я изо всех сил пытаюсь получить стилизованные атрибуты с помощью pre-lollipop API.getTheme(). ResolveAttribute() альтернатива на pre-lollipop

С леденец, я использую

final TypedValue statusBarColor = new TypedValue(); 
getTheme().resolveAttribute(android.R.attr.colorPrimaryDark, statusBarColor, true); 
STATUS_BAR_COLOR = ContextCompat.getColor(this, statusBarColor.resourceId); 

Это работает безупречно, я не нашел подобный способ сделать это ниже версии API 21. (minAPI = 16)

Я попытался с помощью getTheme().obtainStyledAttributes() , Но у меня нет AttributeSet, чтобы предоставить этот метод, поскольку я использую его внутри действия. Я делаю что-то совершенно неправильно или решает стилизованные атрибуты, не поддерживаемые версиями API ниже 21?

ответ

1

Попробуйте этот код

TypedValue typedValue = new TypedValue(); 
    getTheme().resolveAttribute(R.attr.colorPrimaryDark, typedValue, true); 
    STATUS_BAR_COLOR = ContextCompat.getColor(this, typedValue.resourceId); 

Нет необходимости android.R.attr.colorPrimaryDark, вместо этого вы должны использовать R.attr.colorPrimaryDark Вот и все :)

+0

Это хороший один, Я даже не заметил этого, но это не отвечает на мой вопрос. Метод resolveAttribute недоступен в API 16 до 21 – tim687

+0

Вы используете AppCompatActivity, тогда доступно «resolAttribute» :) – Darish

+0

Хмм, я не знаю, почему Android Studio жалуется на это, но это уже не сейчас. Благодаря! – tim687