如何在运行时将主题设置为活动?它在onCreate和setContentView之前调用setTheme不起作用

时间:2012-06-21 09:09:14

标签: android themes

我希望setTheme在运行时参与活动,我已经通过谷歌搜索了一些解决方案。 有人说在onCreate和setContentView之前调用setTheme可以工作,代码部分就像

public void onCreate(Bundle savedInstanceState) {
    setTheme(android.R.style.Theme_Translucent_NoTitleBar);
    super.onCreate(savedInstanceState);
    ...
    setContentView(...)
}

但它不起作用,我想知道,还有另一个解决方案可以将主题设置为活动吗?

4 个答案:

答案 0 :(得分:16)

试试这个 - 在super.onCreate(savedInstanceState);之后和setContentView(...)

之前设置主题

如下面的代码 -

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setTheme(android.R.style.Theme_Translucent_NoTitleBar); // Set here
    setContentView(...)
}

答案 1 :(得分:7)

实际上,如果我在调用super.onCreate(savedInstanceState);

之前设置它,这对我有用
public void onCreate(Bundle savedInstanceState)
{
    final int themeRes = getIntent().getIntExtra(EXTRA_THEME_ID, 0);
    if (themeRes != 0) setTheme(themeRes);
    super.onCreate(savedInstanceState);
    //ect...
}

答案 2 :(得分:3)

setContentView(...);
setTheme(R.style.MyTheme);
setContentView(...);

它必须运作良好..

有关主题的更多信息,请阅读此内容 http://entertheinfinity.blogspot.in/2016/06/designing-android-interface-themes.html

答案 3 :(得分:0)

要在运行时设置主题并解决“黑色背景”问题:

  1. 主题应该设置在manyPaths.forEach(function (element){ var signature = crypto.createHmac('sha256', apiSecret).update(verb + element.path + expires).digest('hex'); var headers = { 'content-type' : 'application/json', 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest', 'api-expires': expires, 'api-key': apiKey, 'api-signature': signature }; const requestOptions = { headers: headers, url:'https://testnet.bitmex.com'+element.path, method: verb }; request(requestOptions, function(error, response, bodyResponse) { if (error) { console.log(error); } else { console.log(bodyResponse); bodyResponse=JSON.parse(bodyResponse); res.render("index", {bodyResponse:bodyResponse}); } }); }); 之前。

    onCreate()
  2. android清单中透明活动的主题应该设置为具有透明背景的任何主题(例如对话框主题)。

    • 这告诉Android OS继续在透明活动后面绘制活动,以免最终不会出现黑色背景。

    • 我正在使用public void onCreate(Bundle savedInstanceState) { setTheme(android.R.style.Theme_Translucent_NoTitleBar); super.onCreate(savedInstanceState); ... setContentView(...) } ;我需要使用AppCompatActivity主题:

      AppCompat