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