Android 以编程方式获取应用于活动的主题值

Android 以编程方式获取应用于活动的主题值,android,android-activity,android-theme,android-styles,Android,Android Activity,Android Theme,Android Styles,我想知道应用程序中的活动应用了哪个主题 通常,我们使用 setTheme(android.R.style.Theme_Light); 这里我们指定了样式,这样我们就能够以编程方式将特定的样式类型准确地应用于活动 感谢上下文类有一个很好的方法,名为getThemeResId,但是它是私有的,因此需要使用反射 下面是一个例子: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(save

我想知道应用程序中的活动应用了哪个主题

通常,我们使用

setTheme(android.R.style.Theme_Light);
这里我们指定了样式,这样我们就能够以编程方式将特定的样式类型准确地应用于活动


感谢上下文类有一个很好的方法,名为
getThemeResId
,但是它是私有的,因此需要使用反射

下面是一个例子:

@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;
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Log.e(“标记”,“定义主题:”+R.style.AppTheme);
Log.e(“TAG”,“Light主题:”+android.R.style.theme_Light);
Log.e(“标记”,“当前主题id:+getThemeId());
setTheme(android.R.style.Theme_Light);
Log.e(“标记”,“当前主题id:+getThemeId());
}
int getThemeId(){
试一试{
类包装器=Context.Class;
Method=wrapper.getMethod(“getThemeResId”);
方法setAccessible(true);
return(Integer)方法。invoke(this);
}捕获(例外e){
e、 printStackTrace();
}
返回0;
}