使用复选框更改应用主题(使用java)

时间:2018-01-31 23:12:14

标签: java android checkbox toolbar android-toolbar

我在我的应用中添加了暗模式,并且我在3点菜单(工具栏)中创建了一个复选框。

我想让应用程序在选中复选框时将主题更改为黑暗,并在取消选中时将其还原为主主题。

这是我当前的暗模式复选框按钮的代码:

The conditional syntax is the well-known ternary operation:

CONDITION ? TRUEVAL : FALSEVAL

我怎样才能使用java?

此外,我想让应用程序记住用户是否最后选择了暗模式。 (这实际上是必需的,因为在重新启动活动后,应用程序将返回到它的旧状态。)

1 个答案:

答案 0 :(得分:1)

要以编程方式更改应用主题,可以在setTheme(...)之前使用onCreate()方法super.onCreate()(来自this question的代码):

public void onCreate(Bundle savedInstanceState) {
    setTheme(android.R.style.Theme); // THIS IS WHERE THE THEME IS SET -- must go before super.onCreate()
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
}

然而,一旦应用已经开始,这不会改变主题。要做到这一点,您需要重新启动应用程序或只是更改活动的背景而不实际更改主题。

重新启动应用

代码来自this question,Marc回答:

Intent i = getBaseContext().getPackageManager()
             .getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

更改背景

如果您需要在应用程序仍在运行时更改背景,您可以设置布局的背景颜色(此处,它设置为红色):

layout.setBackgroundColor(Color.RED);

在应用关闭后保存用户的选择:

执行此操作的最佳方法是使用SharedPreferences API。例如,如果要将后台选项保存为String-to-boolean键值对(其中键为String "background_is_dark",值为true或{{1你可以这样写:

false

要稍后访问该布尔值(如需要确定要设置的背景,请在SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putBoolean("background_is_dark"), true); // here is where you would enter true or false editor.commit(); 中),您将使用此代码:

onCreate()

有关Context context = getActivity(); SharedPreferences isDark = context.getSharedPreferences( "background_is_dark", Context.MODE_PRIVATE); API的详情,请参阅Android's documentation