Android Установка значений textColor как Global

Я делаю несколько уроков, и я попытался изменить textColor. Это прекрасно работает, используя атрибут в каждом виджете, это макет xml или атрибут стиля. Но мне было интересно, можно ли определить глобальный textColor, насколько я вижу, это не так.

Я нашел решение на этих страницах:

http://www.therealjoshua.com/2012/01/styling-android-with-defaults/

http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/

В моей маленькой программе я использовал EditText, RadioButton и Button. Если я установил TextAppearance каждого виджета с блоком стиля с родительским @android:TextAppearance, виджеты потеряли свои другие атрибуты. Поэтому я искал style.xml и theme.xml и нашел очень короткое решение:

<resources>
  <style name="MyTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:editTextColor">@android:color/white</item>
    <item name="android:textColorPrimaryDisableOnly">#FFFFFF</item>
    <item name="android:color/primary_text_light">#FFFFFF</item>      
  </style>           
</resources>

Несмотря на то, что в файле theme.xml используется предопределенный цвет

<style name="TextAppearance.Widget.Button" parent="TextAppearance.Small.Inverse">
    <item name="android:textColor">@android:color/primary_text_light_nodisable</item>
</style>

Мой первый вопрос: есть ли способ перезаписать значение @android:color/primary_text_light_nodisable, как я сделал с другими атрибутами?

На самом деле я думаю, что решил проблему сам:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

  <style name="MyTheme" parent="android:Theme.Light">
    <item name="android:textAppearance">@style/MyTextAppearance</item>
    <item name="android:textAppearanceButton">@style/MyTextAppearanceButton</item>
    <item name="android:editTextStyle">@style/MyEditTextStyle</item>
    <item name="android:radioButtonStyle">@style/MyRadioButtonStyle</item>     
  </style>

  <style name="MyTextAppearance" parent="@android:style/TextAppearance">
    <item name="android:textColor">@android:color/white</item>
  </style>

  <style name="MyTextAppearanceButton" parent="@android:style/TextAppearance.Widget.Button">
    <item name="android:textColor">@android:color/white</item>
  </style>

  <style name="MyEditTextStyle" parent="@android:style/Widget.EditText">
    <item name="android:textColor">@android:color/white</item>
  </style>

  <style name="MyRadioButtonStyle" parent="@android:style/Widget.CompoundButton.RadioButton">
    <item name="android:textColor">@android:color/white</item>
  </style>

</resources>

Итак, мой второй вопрос: правильный ли это способ или есть короткий способ изменить цвет текста глобально?

Хотя я думаю, что определение всего этого в xml - самый чистый метод, я хотел знать, предлагаете ли вы манипулировать этим с помощью методов класса?

Извините, я новичок в программировании на Java и Android, и спасибо за вашу помощь!


person dichter-karl    schedule 21.08.2012    source источник


Ответы (1)


Вы можете создать colors.xml в разделе res/values ​​и объявить свои глобальные цвета отсюда.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="scheme">#007BB3</color>

    <color name="blue">#0000FF</color>
    <color name="white">#FFFFFF</color>
    <color name="grey">#C1C1C1</color>  
</resources>
person David Hirst    schedule 21.08.2012
comment
Я попробовал это и установил ‹color name=primary_text_light_nodisable›#FFFFFF‹/color›, но это не перезаписало значение @android:color... - person dichter-karl; 21.08.2012
comment
Привет, извините, что не яснее. Вы не можете перезаписать @android:color (насколько я знаю), однако то, что вы можете сделать, это установить цвет в вашем colors.xml, а затем вместо этого применить его к элементам View. Затем, когда вы хотите обновить цвет, вы можете изменить его в одном месте, а не во всех файлах макета. - person David Hirst; 21.08.2012
comment
Я думаю, вы не поняли мой вопрос, речь шла не об установке значения цвета, а о том, чтобы установить цвет всего текста в приложении как можно более правильным и коротким для одного цвета. Но я думаю, что вы можете использовать либо атрибут textColor в каждом представлении, либо просто переопределить стиль каждого используемого вами виджета. - person dichter-karl; 21.08.2012