自定义视图的样式从以编程方式设置的切换按钮扩展而来
Style for custom view extended from ToggleButton set programatically
我从 ToggleButton 扩展并想设置我的样式。当我在 xml 中设置样式时一切正常,例如 style="@style/Button.Filter.Text"
但是当我在自定义 ToggleButton 的构造函数中以编程方式设置样式时,比如 super(context, attrs, R.style.Button_Filter_Text);
我的按钮的样式就像普通的 TextView (可能没有样式)
您不能以编程方式设置样式,好的方法是在 xml 中设置样式,然后对其进行膨胀。查看 this answer to confirm and second one,其中描述了更多的方法。
还有 one more example.
three-argument 构造函数中的参数 int defStyleAttr
可能不适用于自定义样式。来自 Android 文档:
defStyleAttr - An attribute in the current theme that contains a reference to a style resource that supplies default values for the
view. Can be 0 to not look for defaults.
要解决这种情况,请使用以下方法:
ContextThemeWrapper wrappedContext = new ContextThemeWrapper(yourContext, R.style.Button_Filter_Text);
View view = new View(wrappedContext, null, 0);
或者,如果您只支持 LOLLIPOP 和更高版本,则有一个带有 4 个参数的 use 构造函数:
View (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
其中 defStyleAttr
应为 0,defStyleRes
是您的样式 ID
我从 ToggleButton 扩展并想设置我的样式。当我在 xml 中设置样式时一切正常,例如 style="@style/Button.Filter.Text"
但是当我在自定义 ToggleButton 的构造函数中以编程方式设置样式时,比如 super(context, attrs, R.style.Button_Filter_Text);
我的按钮的样式就像普通的 TextView (可能没有样式)
您不能以编程方式设置样式,好的方法是在 xml 中设置样式,然后对其进行膨胀。查看 this answer to confirm and second one,其中描述了更多的方法。 还有 one more example.
three-argument 构造函数中的参数 int defStyleAttr
可能不适用于自定义样式。来自 Android 文档:
defStyleAttr - An attribute in the current theme that contains a reference to a style resource that supplies default values for the view. Can be 0 to not look for defaults.
要解决这种情况,请使用以下方法:
ContextThemeWrapper wrappedContext = new ContextThemeWrapper(yourContext, R.style.Button_Filter_Text);
View view = new View(wrappedContext, null, 0);
或者,如果您只支持 LOLLIPOP 和更高版本,则有一个带有 4 个参数的 use 构造函数:
View (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
其中 defStyleAttr
应为 0,defStyleRes
是您的样式 ID