我试图创建一个从MaterialButton
扩展而来的自定义视图,并在代码中应用样式,这样我就不需要在xml中这样做。
class CustomRedButton @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : MaterialButton(ContextThemeWrapper(context, R.style.ButtonRedStyle), attrs, defStyleAttr)
风格是:
<style name="ButtonRedStyle"
parent="Widget.MaterialComponents.Button.TextButton">
<item name="backgroundTint">@color/red</item>
<item name="rippleColor">@color/grey</item>
<item name="strokeWidth">1dp</item>
<item name="strokeColor">@color/black</item>
</style>
一切正常,但backgroundTint
property。由于某种原因,背景色并没有改变,它有主题的原色。但是,如果我尝试将样式应用于xml中的MaterialButton
,它确实会改变颜色。
你知道为什么会这样,或者我怎样才能做到吗?
如果您想更改CustomView
的样式,您必须将其传递给构造函数,方法是将其传递给第三个参数desStyleAttr
,如下所示:
class CustomRedButton @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = R.style.ButtonRedStyle // Just default style like this
) : MaterialButton(context, attrs, defStyleAttr)
你可以通过编程的方式初始化它,
CustomRedButton(this, null, R.style.ButtonRedStyle) // Initialization, ('this' is context)
有关更多详细信息,请参阅此处
我也面临同样的问题。到目前为止,我找到的唯一解决方法是以编程方式设置色调,如下所示:
button.setBackgroundTintList(ColorStateList.valueOf(Color.RED));
使用
MaterialButton(ContextThemeWrapper(context, R.style.ButtonRedStyle), attrs, defStyleAttr)
您正在将themeoverlay应用于默认样式,而不是应用其他样式。
这意味着:
<style name="ButtonRedTheme" parent="...">
<item name="colorPrimary">@color/...</item>
<item name="colorOnPrimary">@color/...</item>
<item name="colorSecondary">@color/...</item>
</style>
如果要应用不同的样式,必须:
attrs中定义自定义属性。xml
<attr name="myButtonStyle" format="reference"/>
xml prettyprint-override"> <style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
<item name="myButtonStyle">@style/CustomButtonStyle</item>
</style>
<style name="CustomButtonStyle" parent="Widget.MaterialComponents.Button.*">
<item name="backgroundTint">@color/...</item>
<item name="rippleColor">@color/grey</item>
<item name="strokeWidth">1dp</item>
<item name="strokeColor">@color/black</item>
</style>
最后使用:
val customButton = MaterialButton(context, null, R.attr.myButtonStyle)
有没有办法以编程方式自定义这些TextInputLayout属性: textColorHint 彩色口音 颜色控制正常 颜色控制已激活 文本选择句柄 我知道如何使用主题属性对它们进行样式化,但是我正在处理的项目动态地加载颜色信息,据我所知,在运行时无法更改主题/样式值。
如何以编程方式设置属性?
问题内容: 有没有办法将应用程序发送到后台?与如何调用类似,我有一些UI元素可以测试。有谁知道这是否完全可能? 问题答案: 我建议退房。这是您可以按“主页”按钮然后重新启动应用程序的方法
问题内容: 我需要重新启动我的应用程序,以防万一我重新加载需要从一开始就开始的内容。我试过了 但我收到一个错误 启动路径不可访问 问题答案: 尽管问题本身是微不足道的(忘记了路径),但在其他人需要相同功能的情况下,我还是留下了疑问。 编辑 (Sw3的每日Swift语法更改; Sw4也适用):
问题内容: 使用标签将SVG直接包含在文档中时,您可以通过文档的样式表将CSS样式应用于SVG。但是,我试图将一种样式应用于嵌入的SVG(使用标签)。 是否可以使用以下代码? 问题答案: 简短的答案:不,因为样式不适用于文档边界。 但是,由于有标签,因此可以使用脚本将样式表插入svg文档。 这样的事情,并请注意,此代码假定已完全加载: 也可以插入一个元素来引用外部样式表: 另一个选择是使用第一种方
我正在尝试使用我自己的应用程序实现或扩展的ResourceConfig或PackageResourceConfig来配置我的Jersey应用程序。因此,我的第一次尝试是将现有的web.xml(实际上,由于开发的库性质,我使用的是web-fragment.xml)配置移植到MyApplication实现。 当我使用第二个版本时,我会收到以下信息 正如您所看到的,是第一个注册的类,但由于它不是公共的,