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