Android 更改整个应用程序';以编程方式设置文本颜色

Android 更改整个应用程序';以编程方式设置文本颜色,android,android-layout,background-color,Android,Android Layout,Background Color,我想用Java更改整个应用程序的文本和背景颜色,这可能吗?我的意思是更改应用程序中每个项目的颜色(文本视图、列表视图、所有项目) 这可能吗 我尝试过使用定制的样式,但我无法使其工作。这是xml文件(放在res/layout/values文件夹中): 但是我得到的错误是,灯不能被解析或者不是一个字段 更新: 我发现以编程方式执行此操作的一种方法是重新启动活动,调用 this.setTheme(R.style.Light); onCreate(null); 但是,这仅适用于当前活动,而不适用于整个

我想用Java更改整个应用程序的
文本
背景
颜色,这可能吗?我的意思是更改应用程序中每个项目的颜色(
文本视图、列表视图、所有项目)

这可能吗

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

但是我得到的错误是,
灯不能被解析或者不是一个字段

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

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

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

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

为了尝试和调整每种类型的视图(按钮、文本视图等),您需要处理它们自己的所有样式以覆盖它们

根据示例,如果您想调整按钮,您需要使用自己的常规样式:

 <item name="android:buttonStyle">@style/ButtonHoloDark</item>
@style/buttonholoder
这将指向您自己的自定义样式,它从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>

@可绘制/btn\u默认值\u全息图\u深色
#ffffff
请注意,对每个视图执行此操作都会带来相当多的主题和样式

您可以在中找到一个很好的示例,该示例与创建一个全息主题后端口到Android2.2或更高版本基本相同


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

您想要更改的属性有:

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

...
...
还有其他几种方法可以改变它们:


然后,您可以通过活动的
onCreate(…)
确定中的Manifest或
setTheme(R.style.AppTheme)
设置此主题,因此我找到了一种可能的解决方案,即使用intent和
putExtra
方法在活动之间传递主题信息

第一个活动(调用方)的代码:

第二个活动(被调用的活动)的代码:


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

您是否尝试设置应用程序的
主题?@chintarrathod是的,但我在这样做时遇到了一些问题,因此,我正在寻找另一种解决方案。您最好调整您的问题,以解决您在通过样式/主题尝试时遇到的问题。@Stefandbruijn完成后,我更新了我的questionActivity.setTheme(android.R.style.light);我不想写这行,试试这个::this.setTheme(R.style.Light)这是对的,但正如问题所问的,他想用java代码来实现这一点。你知道吗?不幸的是,我需要在活动开始后通过Java代码更改主题。知道怎么做吗?嗯,很抱歉,我不知道您实际上需要在Java代码中更改它。我以为您只是认为这是您唯一的选择,因为您的xml实现不起作用。@user1301428如果您有更好的使用xml的解决方案,您能告诉我为什么要使用java代码吗。即使您将遍历java代码,也无法更改整个应用程序主题。你必须在每一个活动中改变它。据我所知,基本上你仍然可以像这样在XML中创建样式,然后用这个.setTheme(R.style.myTheme)在代码中调用它们;但我不知道为什么您要在java代码中这么做。
<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>
<style name="AppTheme" parent="android:style/Theme.Holo">
   <item name="android:textColorPrimary">...</item>
   <item name="android:textColorSecondary">...</item>
</style>
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...