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;
}