user1462299 user1462299 - 3 months ago 19
Android Question

Change Activity's theme programmatically

In particular cases I need to remove dialog theme from my activity but it doesn't seem to be working. Here's an example

First activity:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startActivity(new Intent(MainActivity.this, SecondActivity.class));
}


Second activity:

public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setTheme(android.R.style.Theme);
setContentView(R.layout.activity_second);
}


Manifest excerpt:

<activity android:name="SecondActivity" android:theme="@android:style/Theme.Dialog"></activity>


When I run it's still dialog themed.

API10

Thanks.

Answer

As docs say you have to call setTheme before any view output. It seems that super.onCreate() takes part in view processing.

So, to switch between themes dynamically you simply need to call setTheme before super.onCreate like this:

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