繁体   English   中英

如何通过从Android中的列表视图或微调器中选择选项来更改应用程序主题?

[英]How to change application theme by choosing option from a listview or spinner in android?

每次单击项目时,所提及的内容都应应用于应用程序。

但是,当我在手机中运行该应用程序并选择一个选项时,主题不会改变,也不会显示吐司。

没有错误显示,并且应用程序也没有崩溃。 只是不起作用。

我愿意由一个微调器来做到这一点。 我该怎么办 ?

这是我的代码:

final ListView themeList = (ListView) findViewById(R.id.themeList);

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    if (position == 0) {
        getApplicaiton().setTheme(R.style.themeOne);
    } else if (position == 1) {
        getApplicaiton().setTheme(R.style.themeTwo);
    } else if (position == 2) {
        getApplicaiton().setTheme(R.style.themeThree);
    } else {
        Toast.makeText(ThemeActivity.this, "Something went wrong, please try again!", Toast.LENGTH_SHORT).show();
    }
};

根据Android网站setTheme的文档

为此上下文设置基本主题。 请注意,应在Context中实例化任何视图之前(例如,在调用setContentView(View)或inflate(int,ViewGroup)之前)调用此方法。

因此,您需要在此之前进行更改。

在创建任何视图之前,必须调用setTheme方法。 因此,要真正“改变”您的主题,您必须在调用setContentView之前(甚至在sou调用super.onCreate之前)重新创建活动并调用setTheme

另一个解决方案是不动态更改主题,而是动态更改元素本身(如acitonbar,notificationbar等)。 几乎所有可以设置为主题的属性也可以在Java代码中设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM