Я пытаюсь динамически изменять тему приложения. У меня есть два вида деятельности: один - основной, а другой - активность.Тема не задана Основная активность
В настройках активности Меняю тему из диалога выбора цвета, когда цвет выбран, тема изменена. Но тема только получает изменения для активности настроек, а не основной деятельности.
Я попытался отправить значения цвета из настроек активности в основное действие, но доза приложения не запускается. Он показывает только пустой экран.
Когда я отлаживал, я узнал, что он застрял на первом if(n==0){}
, и цикл продолжается, доза не заканчивается.
Не получается, что не так.
Также может быть основной дозой деятельности, которая не обновляется, когда я поступаю из настроек. Как я могу обновить основную активность?
Настройки активность:
public class Settings extends AppCompatActivity {
int no;
public static final String MyPREFERENCES = "MyPrefs" ;
public static final int color = 0;
public static final int color_2 = 0;
public static final int color_3 = 0;
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
Theme.onActivityCreateSetTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
final ColorPickerDialog colorPickerDialog = new ColorPickerDialog();
colorPickerDialog.initialize(R.string.dialog_title, new int[]{Color.CYAN, Color.LTGRAY, Color.BLACK, Color.BLUE, Color.GREEN, Color.MAGENTA, Color.RED, Color.GRAY, Color.YELLOW}, Color.YELLOW, 3, 2);
colorPickerDialog.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener() {
@Override
public void onColorSelected(int color) {
if (color == Color.CYAN) {
Theme.changeToTheme(Settings.this, Theme.THEME_DEFAULT);
no = 0;
}
else if (color == Color.LTGRAY)
{
Theme.changeToTheme(Settings.this, Theme.THEME_WHITE);
no = 1;
}
else if (color == Color.BLACK) {
Theme.changeToTheme(Settings.this,Theme.THEME_BLUE);
no = 3;
}
Toast.makeText(Settings.this, "selectedColor : " + color, Toast.LENGTH_SHORT).show();
}
});
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putInt("color",no);
// editor.putInt("color_2",no);
// editor.putInt("color_3",no);
editor.commit();
LinearLayout theme = (LinearLayout)findViewById(R.id.theme);
theme.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
colorPickerDialog.show(getSupportFragmentManager(), "colorpicker");
}
});
}
}
Тема:
public class Theme {
private static int sTheme;
public final static int THEME_DEFAULT = 0;
public final static int THEME_WHITE = 1;
public final static int THEME_BLUE = 2;
/** * Set the theme of the Activity, and restart it by creating a new Activity of the same type. */
public static void changeToTheme(Activity activity, int theme) {
sTheme = theme;
activity.finish();
Intent i = new Intent(activity,activity.getClass());
activity.startActivity(i);
}
/** Set the theme of the activity, according to the configuration. */
public static void onActivityCreateSetTheme(Activity activity) {
switch (sTheme) {
default:
case THEME_DEFAULT:
activity.setTheme(R.style.AppTheme);
break;
case THEME_WHITE:
activity.setTheme(R.style.AppTheme_Solarized);
break;
case THEME_BLUE:
activity.setTheme(R.style.BlueTheme);
break;
}
}
}
Основная деятельность:
public class MainActivity extends AppCompatActivity {
private NavigationView navigationView;
private DrawerLayout drawerLayout;
Toolbar mToolbar;
private MainFragment mFragment;
private int no,no1,no2;
@Override
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
no = pref.getInt("color",0);
if(no == 0)
{
setTheme(R.style.AppTheme);
}
else if(no == 1)
{
setTheme(R.style.AppTheme_Solarized);
}
else if(no == 2)
{
setTheme(R.style.BlueTheme);
}
// Theme.onActivityCreateSetTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Спасибо.
Когда вы создаете экземпляры 'MainActivity' и' Settings'? – aribeiro
метод changeToTheme, в этом случае активность возвращается, когда пользователь выбирает цвет из диалогового окна выбора цвета. Экземпляр основной деятельности не создается, когда я отжимаю тему активности, а не chanegd. – Sid