以编程方式设置样式属性时无法在当前主题中找到样式'My_Button'



我正在尝试基于android.widget.Button创建自己的按钮。但是,当我以编程方式设置样式属性时,我会遇到这个渲染问题:

无法在当前主题中找到样式的'my_button'

但是,XML中的设置样式是有效的。

屏幕截图

我错过了什么吗?


activity_main.xml

<com.myapp.Components.Button
    android:id="@+id/xx"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="touch_"
    app:_icon=""/>
<com.myapp.Components.Button
    style="@style/My_Button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="touch"
    app:_icon=""/>

button.java

public class Button extends android.widget.Button {
    public Button(@NonNull Context context) {
        super(context, null, R.style.My_Button);
        init(context, null);
    }
    public Button(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs, R.style.My_Button);
        init(context, attrs);
    }
    public Button(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
        super(context, attrs, R.style.My_Button);
        init(context, attrs);
    }
    // ... more
}

style.xml

<style name="My_Button" parent="Base.Widget.AppCompat.Button.Borderless">
    <item name="android:foreground">?android:attr/selectableItemBackground</item>
    <item name="android:background">#592612</item>
    <item name="android:gravity">center</item>
</style>

最后,我找到了答案!

替换:

super(context, attrs, R.style.My_Button); with super(context, attrs, R.attr.ButtonStyle);

styles.xml 添加

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="ButtonStyle">@style/Button_Style</item>
    ...
</style>

in attr.xml add

<declare-styleable name="Theme">
    <attr name="ButtonStyle" format="reference"/>
</declare-styleable>

相关内容

  • 没有找到相关文章