setTheme在我的活动中间?

时间:2017-03-01 12:06:26

标签: android android-layout android-studio android-theme

我将使用排球请求获得颜色(我需要使用排球,而不是共享偏好。)

问题是在我的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();
        }
    }
}

2 个答案:

答案 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");

检查此答案 - https://stackoverflow.com/a/39150319/1649353