Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何更改活动中可见的首选项的样式_Android_Textview_Preferences_Background Color - Fatal编程技术网

Android 如何更改活动中可见的首选项的样式

Android 如何更改活动中可见的首选项的样式,android,textview,preferences,background-color,Android,Textview,Preferences,Background Color,我想让我的应用程序的用户可以更改我的应用程序的样式。因此,他应该能够决定是否显示背景图片、不同文本视图的文本大小/文本颜色、活动的背景颜色 这怎么可能?!我知道如何设置样式或主题,但我不知道如何根据用户的决定更改样式或主题 你能帮帮我吗 非常感谢:)您可以在运行时更改活动样式,但只能更改为现有样式。例如,您可以在不同的XML文件中定义3种样式,向用户列出这3种样式,让他们选择一种,然后使用Activity.setTheme()设置样式。然后,您必须销毁视图并重新创建它。Android目前不支持在

我想让我的应用程序的用户可以更改我的应用程序的样式。因此,他应该能够决定是否显示背景图片、不同文本视图的文本大小/文本颜色、活动的背景颜色

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

你能帮帮我吗


非常感谢:)

您可以在运行时更改活动样式,但只能更改为现有样式。例如,您可以在不同的XML文件中定义3种样式,向用户列出这3种样式,让他们选择一种,然后使用
Activity.setTheme()
设置样式。然后,您必须销毁视图并重新创建它。Android目前不支持在运行时更改样式的任何其他方法。

您可以在运行时更改活动样式,但只能更改为现有样式。例如,您可以在不同的XML文件中定义3种样式,向用户列出这3种样式,让他们选择一种,然后使用
Activity.setTheme()
设置样式。然后,您必须销毁视图并重新创建它。Android目前不支持在运行时更改样式的任何其他方法。

您的首选项中需要的是一个
列表首选项
类似:

<ListPreference android:key="theme" android:title="@string/theme"
    android:entries="@array/theme_names" android:entryValues="@array/themes" />

这意味着您可能需要重新启动活动,以便再次调用
onCreate()
。但是,您也可以在
onResume()
中调用
setTheme()
,并重新膨胀视图层次结构,以便主题在从首选项返回时有效,而无需重新启动活动。

您的首选项中需要的是
列表首选项
类似于:

<ListPreference android:key="theme" android:title="@string/theme"
    android:entries="@array/theme_names" android:entryValues="@array/themes" />

这意味着您可能需要重新启动活动,以便再次调用
onCreate()
。但是,您也可以在
onResume()
中调用
setTheme()
,重新膨胀视图层次结构,这样主题在从首选项返回时有效,而无需重新启动活动。

非常感谢!我将在接下来的几个小时内尝试;)你能告诉我如何让用户可以选择自己的文本大小吗?不客气。关于文本大小,这是另一个问题。在这里,你说“我知道如何设置样式或主题,但我不知道如何根据用户的决定改变它”。在我看来,你需要问或寻找另一个关于主题和文本大小的问题。。但我不能解决我的问题。如果我在代码中设置主题,我的应用程序不会加载它。我按照您所说的方式创建了它,但我的应用程序保留在theme.Black中(我认为这是默认设置,因为我在清单中留下的字段为空)…有没有办法在类型化数组“themes”中存储@style引用所以userTheme可以是int类型,您可以直接设置主题,而不是通过字符串比较来确定要设置哪个主题?非常感谢!我将在接下来的几个小时内尝试;)你能告诉我如何让用户可以选择自己的文本大小吗?不客气。关于文本大小,这是另一个问题。在这里,你说“我知道如何设置样式或主题,但我不知道如何根据用户的决定改变它”。在我看来,你需要问或寻找另一个关于主题和文本大小的问题。。但我不能解决我的问题。如果我在代码中设置主题,我的应用程序不会加载它。我按照您所说的方式创建了它,但我的应用程序保留在theme.Black中(我认为这是默认设置,因为我在清单中留下的字段为空)…有没有办法在类型化数组“themes”中存储@style引用所以userTheme可以是int类型,您可以直接设置主题,而不是通过字符串比较来确定要设置哪个主题?
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);