3

我想在 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);

但是,这仅适用于当前活动,不适用于整个应用程序。如果可以启动另一个活动,而不仅仅是当前的活动,那就太好了。

4

3 回答 3

1

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

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

例如,如果您想调整 Button ,您需要以自己的一般风格:

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

这将指向您自己的自定义样式,该样式从 Android 的标准 Button 获取其父级。

<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>

请注意,为每个视图执行此操作将带您获得相当多的主题和样式。

您可以在HoloEverywhere 库中找到一个很好的示例,该库对于创建向后移植到 Android 2.2 左右的全息主题基本相同

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

于 2013-01-11T11:12:48.453 回答
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...

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

于 2013-01-11T13:19:50.417 回答
0

您要更改的属性是:

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

还有其他几种方法可以更改它们:请参阅此信息

然后您可以通过 Manifest 或setTheme(R.style.AppTheme)在您的 Activity 中设置此主题onCreate(...)

于 2013-01-11T11:16:14.987 回答