为了账号安全,请及时绑定邮箱和手机立即绑定

以编程方式切换整个应用程序主题?

/ 猿问

以编程方式切换整个应用程序主题?

慕娘9325324 2019-10-18 14:25:47

我正在尝试获得用户选择的主题,并感到很沮丧。在AndroidManifest.xml应有的情况下定义主题,但是(据我所知)不能根据应用程序首选项进行更改:


<application 

    android:theme="@style/theme_sunshine" 

    android:icon="@drawable/icon" 

    android:label="@string/app_name">

另外,在每个活动中动态设置它也可以:


someChosenTheme = PreferenceManager.getDefaultSharedPreferences(this).getString("themePreference", "theme_twilight");

setTheme(someOtherChosenTheme);

但这似乎很混乱,我宁愿将整个应用程序的主题放在一个地方。我的第一个想法是在我的主要活动启动后立即获取应用程序上下文并在其中进行操作:


getApplicationContext().setTheme(R.style.theme_dummy);

尽我所知,这应该可以解决问题,但实际上它什么也没做-整个应用程序都具有默认的Android风格。上面的方法是否有效?如果是,我可能还会做其他愚蠢的事情吗?


如果这很重要,我正在使用API级别3。朝着正确方向的产品大加赞赏!



查看完整描述

3 回答

?
幕布斯6054654

为您的应用创建基本活动,并覆盖onCreate来设置主题。从此基本活动中派生所有其他活动。


还要检查此教程:http : //www.androidengineer.com/2010/06/using-themes-in-android-applications.html



查看完整回答
反对 回复 2019-10-18
?
一只名叫tom的猫

可能有一个很好的解决方案,但是我找不到一个解决方案,所以我最终在需要一个Activity并基本上执行您编写的这两行的helper类中制作了一个静态的helper方法。当然,这并不完美,但是onCreate()可以容忍我的应用程序中的每个方法仅添加一小段代码即可。


查看完整回答
反对 回复 2019-10-18
?
蛊毒传说

我在每个应用程序中都有一个BaseListActivity和一个Base(Generic)Activity。BaseListActivity具有内置的CRUD(读取,添加,编辑,删除)的通用处理,因此创建新的列表活动非常简单,只需重写一些方法即可。当然,如果添加MapActivity或TabActivity,则也必须为其创建BaseXActivity。有时多继承更好:) 

查看完整回答
反对 回复 2019-10-18

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信