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

Posted

技术标签:

【中文标题】以编程方式更改整个应用程序的文本颜色【英文标题】:Change whole application's text color programmatically 【发布时间】:2012-12-25 22:33:33 【问题描述】:

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

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

【问题讨论】:

您是否尝试设置Theme 的应用程序? @ChintanRathod 是的,但我在这样做时遇到了一些问题,所以我正在寻找另一种解决方案 您最好调整您的问题以解决您在通过样式/主题尝试时遇到的问题。 @StefandeBruijn 完成,我已经更新了我的问题 Activity.setTheme(android.R.style.light); i 而不是这一行,试试这个:: this.setTheme(R.style.Light) 【参考方案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 lib 中找到一个很好的示例,该示例对于创建向后移植到 Android 2.2 左右的全息主题基本相同

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

【讨论】:

这是对的,但正如问题所问,他想使用 java 代码来做到这一点。你有什么想法吗 不幸的是,我需要在活动开始后通过 Java 代码更改主题。知道怎么做吗? 嗯,很抱歉,我不知道您实际上需要在 Java 代码中更改它。我以为你只是认为这将是你唯一的选择,因为你的 xml 实现不起作用。 @user1301428 你能告诉我为什么要使用 java 代码,如果你有更好的使用 xml 的解决方案。即使您将通过 java 代码,所以您无法更改整个应用程序主题。您必须在每项活动中进行更改。据我所知 基本上你仍然可以像这样在 XML 中创建样式,然后在你的代码中调用它们 this.setTheme(R.style.myTheme);但我不知道你为什么这么热衷于在你的 java 代码中做这件事。【参考方案2】:

好的,所以我找到了一种可能的解决方案,即使用意图和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...

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

【讨论】:

【参考方案3】:

您要更改的属性是:

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

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

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

【讨论】:

以上是关于以编程方式更改整个应用程序的文本颜色的主要内容,如果未能解决你的问题,请参考以下文章

Android:以编程方式更改选项卡文本颜色

如何在 UIAlertController 中以编程方式更改特定按钮文本颜色

在 Android 11 (API 30) 中以编程方式更改状态栏文本颜色

有没有办法以编程方式使用kotlin更改片段中的文本颜色?

在iOS中选择单元格时如何以编程方式更改原型单元格中的标签文本颜色和图像

以编程方式更改应用小部件背景颜色