[英]How to set theme to Main Activity from another activity?
我有兩個活動。 一個是主要活動,另一個是設置活動。
當用戶從顏色選擇器對話框中選擇顏色時,我想從設置活動中更改主題。
現在我可以更改主題,但它唯一不變的主題是設置活動而不是主要活動。 如何將主題設置為主要活動?
設置活動:
public class Settings extends AppCompatActivity {
@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) {
// startActivityForResult(new Intent(getApplicationContext(),
// ThemedPreferenceActivity.class), SETTINGS_ACTION);
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_1",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();
activity.startActivity(new Intent(activity, activity.getClass()));
}
/** 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.BlueTheme);
break;
}
}
}
編輯:
主要活動 :
@Override
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
no = pref.getInt("color_1", 0);
no = pref.getInt("color_2", 0);
no = pref.getInt("color_3", 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);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
謝謝..
public void updateTheme(int themeID) {
setTheme(themeID);
Intent intent = getIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
overridePendingTransition(0, 0);
}
除非重新啟動當前活動,否則無法動態更改主題。
您可以使用兩種方法來解決這個問題:
在設置內容視圖之前存儲onCreate of activity檢查從首選項共享數據並相應地設置主題。 從設置活動設置共享數據。 在MainActivity中檢查共享數據。
public void onCreate(Bundle savedInstanceState) { if (checkColorData("navcolor").equals("SomeColor")) { setTheme(R.style.AppTheme); } else { setTheme(R.style.AppThemeDarkNav); } }
使用工具欄的工具欄並使用一些顏色可變的視圖,您可以通過調用setBackgoundColor來更改顏色
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.