在java中改变主题不会改变背景颜色

Posted

技术标签:

【中文标题】在java中改变主题不会改变背景颜色【英文标题】:changing theme in java doesn't change background-color 【发布时间】:2011-09-19 14:47:40 【问题描述】:

我正在尝试使用 java 代码在运行时更改主题,因为我希望用户能够通过首选项菜单更改应用程序主题。 所以,我让用户设置主题,然后读取结果如下:

if (...) 
    getApplication().setTheme(R.style.BlackTheme);
 else 
    getApplication().setTheme(R.style.LightTheme);

不幸的是,由于某种原因,这不起作用.... 字体颜色从较深的灰色(浅色主题)略微转变为较亮的灰色(黑色主题) 但背景始终保持白色/黑色(取决于我们最初在清单文件中选择的主题)

如果我完全删除清单文件中的主题条目,那么就好像我会选择黑色主题......

....有什么我忽略的吗?

【问题讨论】:

这应该在 setContentView 之前调用,所以你可能需要重新“创建”你的活动 不,这不起作用。我只是调用 setContentView(R.layout.blabla);然后它应该被“重新创建”,对吧?好吧,它不起作用:-/ 【参考方案1】:

我有同样的问题,我用这种方式解决了..

@Override
public void onCreate(Bundle savedInstanceState) 

    if (getIntent().hasExtra("bundle") && savedInstanceState==null)
        savedInstanceState = getIntent().getExtras().getBundle("bundle");
    

    //add code for theme

    switch(theme)
    
    case LIGHT:
        setTheme(R.style.LightTheme);
        break;
    case BLACK:
        setTheme(R.style.BlackTheme);
        break;

    default:
    
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //code


此代码用于重新创建 Activity 保存 Bundle 并更改主题。 您必须编写自己的 onSaveInstanceState(Bundle outState); 从 API-11 你可以改用 recreate() 方法

Bundle temp_bundle = new Bundle();
onSaveInstanceState(temp_bundle);
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("bundle", temp_bundle);
startActivity(intent);
finish();

【讨论】:

【参考方案2】:

您不能在运行时设置应用主题。如果您想在应用程序中随处更改主题,则必须调用

setTheme(resId)

作为 Activity 的 onCreate() 中的第一件事。

例如:

@Override public void onCreate(Bundle savedInstanceState) 设置主题(resId)

如果你想改变已经开始的活动的主题,那么你必须重新创建它们。

【讨论】:

如何让用户在设置中更改主题,然后切换到该主题?我必须先销毁应用程序吗?而且这不会和Manifest设定的主题冲突吗?【参考方案3】:

这是一个已知问题: https://code.google.com/p/android/issues/detail?id=3793

你必须手动改变背景颜色,setTheme()不会改变它。

【讨论】:

以上是关于在java中改变主题不会改变背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

点击时 UITableViewCells 不会改变颜色

eclipse改变背景颜色

背景排序JTable后,特定值的颜色不会改变

在WordPress自定义css中悬停时背景颜色不会改变

集合视图单元格 didHighlightItemAt 背景颜色在调用时不会改变颜色

java 编程 背景颜色的改变