gpt4 book ai didi

java - 如何动态设置主题?

转载 作者:行者123 更新时间:2023-12-01 10:24:40 25 4
gpt4 key购买 nike

我想将主题添加到我的应用程序中。为此,我添加了颜色选择器对话框。

当用户从应用程序的颜色选择器主题中选择颜色时,我想更改导航栏和 float 按钮的颜色。

如何动态设置主题?

谢谢你..

编辑:

设置 Activity 。

public class Settings extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);


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) {


Toast.makeText(Settings.this, "selectedColor : " + color, Toast.LENGTH_SHORT).show();
}
});

LinearLayout theme = (LinearLayout)findViewById(R.id.theme);

theme.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
colorPickerDialog.show(getSupportFragmentManager(), "colorpicker");
}
});
}

}

最佳答案

您可以在 Activity 中使用 setTheme() 并重新创建 Activity
或者
如果您确切知道要更改哪些颜色,您可以在 Activity 中使用 setTheme() 并手动设置颜色(工具栏背景、fab 颜色、状态栏颜色)。

请注意,setTheme() 动态设置主题,但它不会重绘您的 Activity。因此,在 setTheme() 之后重新绘制的所有内容都已经使用了您的新主题! (可以在 Lollipop 的/Marchmallow 的最近应用列表中看到 -> 即使没有重新创建 Activity,应用顶部的颜色也会在 setTheme() 之后发生变化)。

似乎没有办法动态创建主题。因此,我建议仅提供一个选择的预定义主题(以 XML 形式)并应用它们。完全动态颜色更改的解决方法是自己更改所有元素的颜色。我写了一个方法来为工具栏和操作栏执行此操作。下面是基于枚举颜色{RED、GREEN、BLUE}的方法:

private void setColors(COLORS color) {
int toolbarColor = 0;
int statusbarColor = 0;
switch (color) {
case GREEN:
setTheme(R.style.AppTheme_NoActionBar_Green);
toolbarColor = R.color.green;
statusbarColor = R.color.greenDark;
break;
case RED:
setTheme(R.style.AppTheme_NoActionBar_Red);
toolbarColor = R.color.red;
statusbarColor = R.color.redDark;
break;
case BLUE:
setTheme(R.style.AppTheme_NoActionBar_Blue);
toolbarColor = R.color.blue;
statusbarColor = R.color.blueDark;
break;
}
mToolbar.setBackgroundColor(ContextCompat.getColor(MainActivity.this, toolbarColor));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(ContextCompat.getColor(MainActivity.this, statusbarColor));
}
}

其中 AppTheme.NoActionBar.Green、AppTheme.NoActionBar.Red 和 AppTheme.NoActionBar.Blue 扩展 AppTheme.NoActionBar,并且仅覆盖主色、主深色和强调色。

关于java - 如何动态设置主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35406711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com