自定义主题属性

时间:2016-02-06 05:16:10

标签: android xml user-interface themes

因此,在Android上我们有colorPrimaryDark等属性,可通过以下方式访问:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    app:elevation="6dp"
    app:layout_anchor="@id/recycler_view"
    android:layout_marginRight="40dp"
    android:layout_marginBottom="86dp"
    app:fabSize="normal"
    app:backgroundTint="?android:attr/colorPrimaryDark"
    app:layout_anchorGravity="bottom|right|end" />

现在,我决定创建自己的属性。所以,这就是我所做的;

attrs.xml中的

第1步

<?xml version="1.0" encoding="utf-8"?>
<resources >
    <declare-styleable name="AppTheme">
        <attr name="colorLeadingDark" format="color" />
    </declare-styleable>
</resources>
Styles.xml中的

第2步

<style name="AppTheme">
    <item name="colorLeadingDark">#9C27B0</item>
</style>

第3步 fab

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    app:elevation="6dp"
    app:layout_anchor="@id/recycler_view"
    android:layout_marginRight="40dp"
    android:layout_marginBottom="86dp"
    app:fabSize="normal"
    app:backgroundTint="?attr/colorLeadingDark"
    app:layout_anchorGravity="bottom|right|end" />

第4步设置主题

我在我的活动中设置了这个主题onCreate

当我运行我的代码时,这没问题。我可以看到我想要的FAB颜色。但是,问题是当我点击FAB时我崩溃了。

android.view.InflateException: Binary XML file line #17: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:640)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
at android.view.LayoutInflater.inflate(LayoutInflater.java:415)

第17行是XML声明中FAB的第一行。

以下情况可以正常使用:

  • colorPrimaryDark是系统定义(这告诉我我的代码没问题)
  • 如果我通过使用TypedArray typedArray=context.obtainStyledAttributes(getCurrentTheme(), attrs);加载相同的颜色以编程方式设置颜色。 (这告诉我我的自定义属性实现是正确的。)

现在问题出现在我点击的时候。我究竟做错了什么?

0 个答案:

没有答案