以编程方式更改整个应用程序的文本颜色
Posted
技术标签:
【中文标题】以编程方式更改整个应用程序的文本颜色【英文标题】:Change whole application's text color programmatically 【发布时间】:2012-12-25 22:33:33 【问题描述】:我想在Java中更改整个应用程序的text
和background
颜色,可以吗?有了这个,我的意思是改变应用程序中每个项目的颜色(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)
设置此主题
【讨论】:
以上是关于以编程方式更改整个应用程序的文本颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIAlertController 中以编程方式更改特定按钮文本颜色
在 Android 11 (API 30) 中以编程方式更改状态栏文本颜色