我想让我的应用程序的用户可以更改我的应用程序的样式。所以他应该能够决定是否显示背景图片,不同textViews的textSize / textColor,活动的背景颜色。
怎么可能?!我知道如何设置样式或主题,但我不知道如何根据用户的决定更改它。
你能帮我吗?!
非常感谢:)
答案 0 :(得分:4)
您在偏好设置中需要的是ListPreference
喜欢:
<ListPreference android:key="theme" android:title="@string/theme"
android:entries="@array/theme_names" android:entryValues="@array/themes" />
然后在arrays.xml中添加如下内容:
<array name="themes">
<item>dark</item>
<item>light</item>
<item>purple</item>
</array>
<array name="theme_names">
<item>@string/dark</item>
<item>@string/light</item>
<item>@string/purple</item>
</array>
然后在onCreate()
中使用setTheme():
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String userTheme = prefs.getString("theme", "dark");
if (userTheme.equals("dark"))
setTheme(R.style.Theme_Dark);
else if (userTheme.equals("light"))
setTheme(R.style.Theme_Light);
// etc...
setContentView(R.layout.main);
这意味着您可能需要重新启动活动,以便再次调用onCreate()
。但是,或者,您可以在setTheme()
中调用onResume()
并重新膨胀视图层次结构,以便在从首选项返回时主题有效,而无需重新启动活动。
答案 1 :(得分:0)
您可以在运行时更改活动样式,但仅限于现有样式。因此,您可以在不同的XML文件中定义3个样式,将这3个样式列入您的用户,让他们选择一个,然后使用Activity.setTheme()
设置样式。然后,您必须销毁视图并重新创建它。 Android目前不支持在运行时更改样式的任何其他方法。