2016-06-07 3 views
0

Имея две темы, можно динамически переключаться.Как динамически менять цвет с использованием определенного атрибута

Существует атрибут txtColor определен в attrs.xml

<attr name=“txtColor” format="reference" /> 

в themes.xml, определенный цвет для атрибута в другую тему

<style name=“CustomLight" parent="AppTheme.Base"> 
    <item name="txtColor”>#000000</item> 

<style name=“CustomDark" parent="AppTheme.Base"> 
    <item name="txtColor”>#ffffff</item> 

в файле макета, используя атрибут является прекрасным

android:textColor="?attr/txtColor" 

но получил исключение при попытке использования атрибут txtColor

Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f010015 
txtView.setTextColor(getResources().getColor(R.attr.txtColor)); 

вопрос: как динамически менять цвет с помощью атрибута?

+0

вы можете показать, как вы называете 'txtView.setTextColor (GetResources() GetColor (R.attr.txtColor).);' – Akis

+0

@Akis, не уверен, что вы просите, это TextView и txtView .setTextColor(), чтобы установить цвет (предположительно, с идентификатором цветового ресурса). – lannyf

ответ

1

Первый формат атрибут должен быть «цвет»

<attr name="txtColor" format="color"/>

Затем вы можете установить цвет делает это:

int[] attrs = {R.attr.txtColor} ; 
try { //getPackageManager() can throw an exeption 
    Activity activity = getActivity(); 
    themeId = activity.getPackageManager().getActivityInfo(activity.getComponentName(), 0).theme; 
    TypedArray ta = activity.obtainStyledAttributes(themeId, attrs); 
    int color = ta.getColor(0, Color.BLACK); //I set Black as the default color 
    txtView.setTextColor(color); 
    ta.recycle(); 
} catch (NameNotFoundException e) { 
    e.printStackTrace(); 
} 
1

Я думаю, что я нашел простое решение, которое работало с существующими attrs, вот он, если кто-то ищет то же самое, какие-то более простые? Благодаря!

Смежные вопросы