如何在我的活动中显示的首选项中更改样式

时间:2011-04-05 17:21:42

标签: android textview preferences background-color

我想让我的应用程序的用户可以更改我的应用程序的样式。所以他应该能够决定是否显示背景图片,不同textViews的textSize / textColor,活动的背景颜色。

怎么可能?!我知道如何设置样式或主题,但我不知道如何根据用户的决定更改它。

你能帮我吗?!

非常感谢:)

2 个答案:

答案 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目前不支持在运行时更改样式的任何其他方法。