这是我的按钮:
public class ChimmerButton extends Button {
public ChimmerButton(Context context) {
super(context);
}
public ChimmerButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ChimmerButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
/*
* This method is used to apply the external font
*/
public void setTypeface(Typeface tf, int style) {
if (!isInEditMode()) {
super.setTypeface(Typeface.createFromAsset(
getContext().getAssets(), "calibre-regular.ttf"));
}
}
}
如何使用上面的代码在所有chimmerButtons上应用Theme.Light.NoTitleBar.Fullscreen?对此有什么解决方案吗?
答案 0 :(得分:1)
请注意,应在实例化任何视图之前调用此方法 Context(例如在调用setContentView(View)或之前) inflate(int,ViewGroup))。
从:
http://developer.android.com/reference/android/view/ContextThemeWrapper.html#setTheme%28int%29
不幸的是,您必须在显示活动之前设置主题。
因此,您不能拥有由运行时代码驱动的“动态”主题(尽管上面的注释显示了如何为按钮创建自定义主题)
答案 1 :(得分:0)
ContextThemeWrapper themedContext;
public ChimmerButton(ContextThemeWrapper themedContext) {
This.themedContext = themedContext;
}
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {
themedContext = new ContextThemeWrapper( Activity.this, android.R.style.Theme_Holo_Light_Dialog_NoActionBar );
}
else {
themedContext = new ContextThemeWrapper( Activity.this, android.R.style.Theme_Light_NoTitleBar );
答案 2 :(得分:0)
按钮的主题默认情况下依赖于上下文。因此,不要为按钮设置主题,而是为包含按钮的活动设置主题。这是一个更容易的解决方案。