【问题标题】:Save the theme selected in the preferences保存在首选项中选择的主题
【发布时间】:2018-08-10 21:13:25
【问题描述】:

无法从设置菜单切换应用程序的主题。从“else”块开始一个主题

SharedPreferences sharedPrefs;

final String CURRENT_THEME = "CURRENT_THEME";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    String theme = sharedPrefs.getString("CURRENT_THEME",null);
    if(theme != null && theme.equals("light"))
    {
        setTheme(R.style.AppThemeLight);
    }
    else
    {
        setTheme(R.style.AppTheme);
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);}

  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.lightTheme:
            SharedPreferences.Editor editor1 = sharedPrefs.edit();
            editor1.putString(CURRENT_THEME, "light");
            editor1.commit();
            return true;
        case R.id.darkTheme:
            SharedPreferences.Editor editor2 = sharedPrefs.edit();
            editor2.putString(CURRENT_THEME, "dark");
            editor2.commit();
            return true;}

【问题讨论】:

    标签: android preferences


    【解决方案1】:

    从选项菜单中选择主题后更改主题。

    并使用editor.apply() 而不是editor.commit()

    final String CURRENT_THEME = "CURRENT_THEME";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
        changeTheme();
        }
    
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.lightTheme:
                SharedPreferences.Editor editor1 = sharedPrefs.edit();
                editor1.putString(CURRENT_THEME, "light");
                editor1.apply();
                changeTheme();
                return true;
            case R.id.darkTheme:
                SharedPreferences.Editor editor2 = sharedPrefs.edit();
                editor2.putString(CURRENT_THEME, "dark");
                editor2.apply();
                changeTheme();
                return true;}
    
    
        private void changeTheme(){
            String theme = sharedPrefs.getString(CURRENT_THEME,"light");
            if(theme != null && theme.equals("light"))
            {
                setTheme(R.style.AppThemeLight);
            }
            else
            {
                setTheme(R.style.AppTheme);
            }
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    

    【讨论】:

      【解决方案2】:
       SharedPreferences sharedPrefs;
      

      最终字符串 CURRENT_THEME = "CURRENT_THEME";

      @Override
      public void onCreate(final Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
          changeTheme();
          setContentView(R.layout.activity_main);
      }
      
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
              case R.id.lightTheme:
                  SharedPreferences.Editor editor1 = sharedPrefs.edit();
                  editor1.putString(CURRENT_THEME, "light");
                  editor1.apply();
                  changeTheme();
                  return true;
              case R.id.darkTheme:
                  SharedPreferences.Editor editor2 = sharedPrefs.edit();
                  editor2.putString(CURRENT_THEME, "dark");
                  editor2.apply();
                  changeTheme();
                  return true;
      
              default:
                  return super.onOptionsItemSelected(item);
          }
      }
      private void changeTheme(){
          String theme = sharedPrefs.getString(CURRENT_THEME,"light");
          if(theme != null && theme.equals("light"))
          {
              setTheme(R.style.AppThemeLight);
              }
          else
          {
              setTheme(R.style.AppTheme);
          }
      
         // super.onCreate(savedInstanceState);
         // setContentView(R.layout.activity_main);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-01
        • 2012-08-13
        • 1970-01-01
        • 2018-08-10
        • 2014-08-02
        • 1970-01-01
        • 2012-10-27
        相关资源
        最近更新 更多