Android 如何以编程方式在所有按钮上应用主题?

Android 如何以编程方式在所有按钮上应用主题?,android,themes,Android,Themes,这是我的按钮: public class ChimmerButton extends Button { public ChimmerButton(Context context) { super(context); } public ChimmerButton(Context context, AttributeSet attrs) { super(context, attrs); } public ChimmerButton(Context context, Attrib

这是我的按钮:

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"));
    }
}
}
如何使用上述代码在所有按键上应用Theme.Light.NoTitleBar.Fullscreen??有什么解决办法吗

请注意,应在中实例化任何视图之前调用此函数 上下文(例如在调用setContentView(View)或 充气(内部,视图组))

发件人:

不幸的是,您必须在显示活动之前设置主题


因此,您不能让运行时代码驱动“动态”主题(尽管上面的注释显示了如何为按钮创建自定义主题)

默认情况下,按钮的主题取决于上下文。因此,与其为按钮设置主题,不如为包含按钮的活动设置主题。这是一个容易得多的解决办法


请注意第二个参数:
ChimmerButton(Context-Context,AttributeSet-attrs)
关于这一点的更多信息我不想将其应用于活动尝试这一点:尝试过,但未完全实现。只有按钮文本会更改,但其大小会有所不同
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 );