Friday, October 23, 2015

// //

Implementing users choice theme/apply theme to all activity programmatically Part 2

Hi! thank you for tuning in....
Please follow this previus tutorial...  I think you have your strings.xml right now the themes and the settings.xml
Right now we will only create an activity file....


In your MainActivity.java copy this code before super.onCreate(savedInstanceState);:
SharedPreferences pref = PreferenceManager
    .getDefaultSharedPreferences(this);
  String themeName = pref.getString("prefSyncFrequency3", "Theme1");
  if (themeName.equals("Africa")) {
   setTheme(R.style.AppTheme);
   
  
  
  
  } else if (themeName.equals("Colorful Beach")) {
   //Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show();
   setTheme(R.style.beach);
  } else if (themeName.equals("Abstract")) {
   //Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show();
   
   setTheme(R.style.abstract2);
  } else if (themeName.equals("Default")) {
   
   setTheme(R.style.defaulttheme);
   
  }

After that create a new class and named it, UserSettingActivity:
Here's the code:


import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.Preference.OnPreferenceChangeListener;
import android.view.MenuItem;
import android.widget.Toast;

public class UserSettingActivity extends PreferenceActivity {
 public static final int RESULT_CODE_THEME_UPDATED = 1;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  
  SharedPreferences pref = PreferenceManager
    .getDefaultSharedPreferences(this);
  String themeName = pref.getString("prefSyncFrequency3", "Theme1");
  if (themeName.equals("Africa")) {
   setTheme(R.style.AppTheme);
   
  
 
  } else if (themeName.equals("Colorful Beach")) {
   //Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show();
   setTheme(R.style.beach);
   
   
  } else if (themeName.equals("Abstract")) {
   //Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show();
   
   setTheme(R.style.abstract2);
 
  } else if (themeName.equals("Default")) {
   
   setTheme(R.style.defaulttheme);
   
  }
  //Toast.makeText(this, "Theme has been reset to " + themeName,
   // Toast.LENGTH_SHORT).show();
   super.onCreate(savedInstanceState);
  
  
  super.onCreate(savedInstanceState);
  getActionBar().setTitle("Settings");
  getActionBar().setDisplayHomeAsUpEnabled(true);
  addPreferencesFromResource(R.xml.settings);
  findPreference("prefSyncFrequency3").setOnPreferenceChangeListener(new RefershActivityOnPreferenceChangeListener(RESULT_CODE_THEME_UPDATED));
 }
 
    public class RefershActivityOnPreferenceChangeListener implements OnPreferenceChangeListener {
        private final int resultCode;
        public RefershActivityOnPreferenceChangeListener(int resultCode) {
            this.resultCode = resultCode;
        }

        @Override
        public boolean onPreferenceChange(Preference p, Object newValue) {
            setResult(resultCode);
            return true;
        }
    }
    
    
    @Override
 public boolean onOptionsItemSelected(MenuItem item) {

  switch (item.getItemId()) {
   case android.R.id.home: {
    
    finish();
    break;
   }
    }
  return super.onOptionsItemSelected(item);
    }
}


And in AndroidManifest never forget to call UserSettingActivity:
Note: That is my case.


HAPPY CODING!
never forget to comment below of you are having errors...