我将使用排球请求获得颜色(我需要使用排球,而不是共享偏好。)
问题是在我的setContentView之后设置它。
style.xml:
<style name="Red" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">#ff0000</item>
<item name="colorPrimaryDark">#000000</item>
<item name="colorAccent">#ff0000</item>
</style>
我的oncreate:
protected void onCreate(Bundle savedInstanceState) {
String color = "Red"; // I need to get this color using volley, so I cannot set red here, but if I don't set it here, it will not work.
Utils.setThemeToActivity(this, color); // same
super.onCreate(savedInstanceState);
setContentView(R.layout.name);
}
它正在工作,因为我将颜色设置为红色。但是我需要从凌空中得到这个红色所以我不能把它放在oncreate的第一行,就像现在一样。
任何想法如何将红色传递给Utils.setTheme
?
我的实用程序:
public class Utils {
public static String SIZE="";
public static boolean settingChanged=false;
public static String THEME="";
public static void setThemeToActivity(Activity act, String color ) {
try {
if(Utils.THEME.equalsIgnoreCase("Yellow")) {
act.setTheme(R.style.Yellow);
}
if(Utils.THEME.equalsIgnoreCase("Red")) {
act.setTheme(R.style.Red);
}
if(Utils.THEME.equalsIgnoreCase("Blue")) {
act.setTheme(R.style.Blue);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
如果要更改现有活动的主题,请在setTheme()之后调用recreate()。
喜欢
您的网络服务响应然后调用
Utils.setThemeToActivity(this, color); // same
this.recreate()
if you wanna to do something in recreate then Override this method otherwise no need to write it
@Override
public void recreate() {
super.recreate();
}
尝试第二种解决方案
public static void setThemeToActivity(Activity act, String color ) {
try {
if(Utils.THEME.equalsIgnoreCase("Yellow")) {
act.setTheme(R.style.Yellow);
}
if(Utils.THEME.equalsIgnoreCase("Red")) {
act.setTheme(R.style.Red);
}
if(Utils.THEME.equalsIgnoreCase("Blue")) {
act.setTheme(R.style.Blue);
}
act.finish();
act.startActivity(new Intent(act, activity.getClass()));
}
catch (Exception e) {
e.printStackTrace();
}
}
答案 1 :(得分:1)
您可以使用如下 -
Theme theme = super.getTheme();
theme.applyStyle("Your style");