我可以在清单中设置应用程序的主题,如下所示:
<application>
android:theme="@style/AppTheme.NoActionBar"
<!-- Activities here -->
</application>
我还知道如何在清单中以及以编程方式设置活动主题。
我想知道的是如何以编程方式设置整个应用程序的主题(我打算允许用户在多个主题之间选择)。
一种解决方案是将所选主题应用于onCreate
方法中的所有活动,但是我有很多活动。有没有更简单的解决方案?
答案 0 :(得分:3)
正如您在this帖子中看到的那样,无法按预期设置应用整体主题。 但是,您可以使用SharedPreference对象在设置Activity中设置主题,并在所需的每个Activity中应用主题:
OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 11:00:00
在“任何活动”中,在super.onCreate(savedInstanceState)之前实现这段代码:
//A method that return your styles id
int style_var=getStyle();
SharedPreferences.Editor editor
=getSharedPreferences("mypref",
MODE_PRIVATE).edit();
editor.putInt("idName", style_var);
editor.apply();
更新: 为了避免重复代码, 创建一个这样的自定义Activity类:
SharedPreferences prefs =
getSharedPreferences("mypref",
MODE_PRIVATE);
int styleId = prefs.getInt("idName",
R.style.defaultStyle);
//set Activity theme
setTheme(styleId);
,只需从自定义活动(而不是活动)扩展活动:
public class myBaseActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState)
{
SharedPreferences prefs =
getSharedPreferences("mypref",MODE_PRIVATE);
int styleId = prefs.getInt("idName",R.style.AppTheme);
//set Activity theme
setTheme(styleId);
super.onCreate(savedInstanceState);
}
}
最后在设置“活动”中,执行以下代码以重新加载应用程序(例如,将其放入“保存并重新加载”按钮的Onclick方法中):
public class AnyActivity extends
myBaseActivity{
@Override
public void onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.any);
}
}
我希望有帮助。