How to Apply theme activity in android by programmatically?

I want to know which theme is applied for an Activity in an application.

Normally we are setting the theme by using

setTheme(android.R.style.Theme_Light);

Here we are specifying style, As like  this can we able to get the specific style type exactly applied for an activity programmatically.

Last updated:11/7/2014 3:14:53 AM

1 Answers

David Miller
David Miller

Context class has a nice method called getThemeResId, however it's private thus you need to use reflection.

Here's an example:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);

    Log.e('TAG', 'Def theme: ' + R.style.AppTheme);
    Log.e('TAG', 'Light theme: ' + android.R.style.Theme_Light);
    Log.e('TAG', 'Current theme id: ' + getThemeId());

    setTheme(android.R.style.Theme_Light);
    Log.e('TAG', 'Current theme id: ' + getThemeId());
}

int getThemeId() {
    try {
        Class<?> wrapper = Context.class;
        Method method = wrapper.getMethod('getThemeResId');
        method.setAccessible(true);
        return (Integer) method.invoke(this);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 0;
}

Answer