以编程方式更改整个应用程序的文本颜色

时间:2013-01-11 10:50:08

标签: android android-layout background-color

我想在Java中更改整个应用程序的textbackground 颜色,这可能吗?有了这个,我的意思是更改应用程序中每个项目的颜色( TextViews, ListView 项目,所有内容。)

这可能吗?

我尝试过使用定制的风格,但我无法使其正常工作。这是xml文件(放在res/layout/values文件夹中):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Light">
        <item name="android:textColor">#00FF00</item>
    </style>
</resources>

假设我现在只想更改文字颜色。

现在我在我的应用程序中调用这种样式:

public void onCreate(Bundle icicle) {

    Activity.setTheme(android.R.style.light);
    super.onCreate(icicle);
    setContentView(R.layout.main);

但我收到错误light cannot be resolved or is not a field

更新

我发现以编程方式执行此操作的一种方法是重新启动活动,调用

this.setTheme(R.style.Light);
onCreate(null);

但是,这仅适用于当前活动,而不适用于整个应用程序。如果能够启动另一个活动,而不仅仅是当前的活动,那将会很棒。

3 个答案:

答案 0 :(得分:1)

你正在以一种简单的方式尝试它。像这样你只是调整你的一般活动的背景而不是那里的所有不同的视图。

为了尝试调整每种类型的视图(按钮,TextView等),您需要解决所有自己的样式以覆盖它们。

每个例子,如果你想调整按钮,你需要用你自己的一般风格:

 <item name="android:buttonStyle">@style/ButtonHoloDark</item>

这将指向您自己的自定义样式,该样式的父级来自Android的标准按钮。

<style name="ButtonHoloDark" parent="android:style/Widget.Button">
    <item name="android:background">@drawable/btn_default_holo_dark</item>
    <item name="android:textColor">#ffffff</item>
</style>

请注意,为每个View执行此操作会带给您很多主题和样式。

你可以找到一个很好的例子,如何在HoloEverywhere lib中完全做到这一点,这基本上是为了创建一个向后移植到Android 2.2左右的全息主题

最后,删除Activity.setTheme(android.R.style.light);东西,只需通过清单设置自己的主题。

答案 1 :(得分:1)

好的,我找到了一个可能的解决方案,即使用意图和putExtra方法在活动之间传递主题信息。

第一项活动的代码(来电者):

Intent i = new Intent(this, ActivityToCall.class);
i.putExtra("key", R.style.Light);
startActivity(i);

第二项活动的代码(被叫一项):

public void onCreate(Bundle icicle) {
    int theme = getIntent().getIntExtra("key",-1);
    this.setTheme(theme);
    super.onCreate(icicle);
    // other code...

我不知道这是否是最好的方法,但至少它是有效的。

答案 2 :(得分:0)

您想要更改的属性是:

<style name="AppTheme" parent="android:style/Theme.Holo">
   <item name="android:textColorPrimary">...</item>
   <item name="android:textColorSecondary">...</item>
</style>

还有其他一些方法可以更改它们:Please Refer to this information

然后,您可以通过动态setTheme(R.style.AppTheme)

中的清单或onCreate(...)设置此主题