Я делаю несколько уроков, и я попытался изменить 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, и спасибо за вашу помощь!