因此,在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);
加载相同的颜色以编程方式设置颜色。 (这告诉我我的自定义属性实现是正确的。)现在问题出现在我点击的时候。我究竟做错了什么?