Android 使用属性的自定义视图背景会导致崩溃

Android 使用属性的自定义视图背景会导致崩溃,android,xml,exception,resources,stack-trace,Android,Xml,Exception,Resources,Stack Trace,我最近一直在安卓系统中尝试使用样式,但在自定义视图背景资源中使用attrs显然失败了。因此,基本上,我想让用户设置一个自定义主题,如果他或她想要的话。我有一个主片段,它承载了一个支持ViewPager。ViewPager中的每个页面都会使用自定义背景的自定义视图进行充气。视图的背景指向一个样式引用,该样式引用基本上是由选定主题调整的颜色 属性 为数不多的定制样式之一 相应颜色 背景资源 使用后台资源的视图仅是重要部分 现在,我在ApplicationManifest.xml中设置了一个

我最近一直在安卓系统中尝试使用样式,但在自定义视图背景资源中使用attrs显然失败了。因此,基本上,我想让用户设置一个自定义主题,如果他或她想要的话。我有一个主片段,它承载了一个支持ViewPager。ViewPager中的每个页面都会使用自定义背景的自定义视图进行充气。视图的背景指向一个样式引用,该样式引用基本上是由选定主题调整的颜色

属性

为数不多的定制样式之一

相应颜色

背景资源

使用后台资源的视图仅是重要部分


现在,我在ApplicationManifest.xml中设置了一个示例主题集,比如@style/theme.ColorScheme.Turquoise,应用程序立即崩溃,引发通货膨胀异常。我对可能出现的错误一无所知。

更改格式=引用格式=颜色。

更改格式=引用格式=颜色。

实际上这是Android的问题,它在棒棒糖版本中得到了修复,请参考谷歌问题跟踪链接


因此,你应该为每个主题创建单独的绘图功能。

实际上,这是Android问题,它在棒棒糖版本中得到了修复,请参考谷歌问题跟踪链接

因此,您应该为每个主题创建单独的可绘制图。

因此,我通过在一个主题上的回复解决了我的问题。显然,Android无法处理drawables中的属性引用,这非常不方便。相反,我们应该创建一个对背景绘图的引用,为每个主题创建一个绘图,并将每个主题引用到相应的主题。基本上,我完成了以下设置:

背景资源

创建新引用

将资源引用添加到自定义主题

我对这个解决方案不是很满意,因为从逻辑上讲,我的第一次尝试应该是完美的。我不能说为什么Android不接受drawables中的属性,我可能也不理解。除非有人愿意启发我并提供更好的解决方案,否则我想我必须坚持这一点。

因此,我用一个简单的回答解决了我的问题。显然,Android无法处理drawables中的属性引用,这非常不方便。相反,我们应该创建一个对背景绘图的引用,为每个主题创建一个绘图,并将每个主题引用到相应的主题。基本上,我完成了以下设置:

背景资源

创建新引用

将资源引用添加到自定义主题


我对这个解决方案不是很满意,因为从逻辑上讲,我的第一次尝试应该是完美的。我不能说为什么Android不接受drawables中的属性,我可能也不理解。除非有人愿意启发我并提供更好的解决方案,否则我想我必须坚持这一点。

日志说01-11 16:48:25.511:E/AndroidRuntime2037:android.view.InflateException:二进制XML文件第9行:错误膨胀类在你的XML@oguzhand好视图资源中的第九行是我在问题中包含的视图布局中的第一行。所以基本上9会参考日志01-11 16:48:25.511:E/AndroidRuntime2037:android.view.InflateException:Binary XML文件第9行:错误膨胀类在你的XML@oguzhand我的视图资源中的第九行是我在问题中包含的视图布局中的第一行。所以基本上9指的是悲伤,也不起作用。同样的错误也会出现,但它也建议为每个主题创建一个资源。那不可能是真的,对吧?不幸的是,这也不起作用。同样的错误也会出现,但它也建议为每个主题创建一个资源。那不可能是真的,对吧?不幸的是,在我完成我自己对我自己问题的回答之前,我没有看到你的回答。据我所知,这应该在安卓5.0+上运行,对吗?我使用4.4.2在平板电脑上运行我的应用程序,所以这可能就是它不起作用的原因。谢谢你的研究。我会检查你的答案是否正确。不幸的是,在我完成对我自己问题的回答之前,我没有看到你的回答。据我所知,这应该在安卓5.0+上运行,对吗?我使用4.4.2在平板电脑上运行我的应用程序,所以这可能就是它不起作用的原因。谢谢你的研究。我会检查你的答案是否正确。
<attr name="designBase400" format="reference" />
<attr name="designBase500" format="reference" />
<attr name="designBase700" format="reference" />
<style name="Theme.ColorScheme.Turquoise" parent="AppTheme">
    <item name="designBase400">@color/design_base_400_turquoise</item>
    <item name="designBase500">@color/design_base_500_turquoise</item>
    <item name="designBase700">@color/design_base_700_turquoise</item>
</style>

<style name="AppTheme" parent="AppBaseTheme">
    <item name="windowActionBar">false</item>
    <item name="android:spinnerItemStyle">@style/SpinnerItem</item>
    <item name="android:spinnerDropDownItemStyle">@style/SpinnerItem.DropDownItem</item>
</style>
<color name="design_base_500_turquoise">#009688</color>
<color name="design_base_700_turquoise">#00796B</color>
<color name="design_base_400_turquoise">#26A69A</color>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <solid android:color="?attr/designBase400" />
</shape>
<RelativeLayout
    android:id="@+id/view_entry_hour_container"
    android:layout_width="@dimen/entry_view_circle_dimen"
    android:layout_height="@dimen/entry_view_circle_dimen"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_centerVertical="false"
    android:background="@drawable/background_circle" >

    <TextView
        android:id="@+id/view_entry_hour"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="false"
        android:layout_alignParentStart="false"
        android:layout_centerHorizontal="true"
        android:layout_centerInParent="true"
        android:layout_centerVertical="true"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="@android:color/white"
        android:textSize="@dimen/entry_view_hour_size"
        android:textStyle="bold" />

</RelativeLayout>
<attr name="designBase400" format="color" />
<attr name="designBase500" format="color" />
<attr name="designBase700" format="color" />

<!-- reference which points to the corresponding background resource -->
<attr name="circleBackground" format="reference" />
<style name="Theme.ColorScheme.Turquoise" parent="AppTheme">
    <item name="designBase400">@color/design_base_400_turquoise</item>
    <item name="designBase500">@color/design_base_500_turquoise</item>
    <item name="designBase700">@color/design_base_700_turquoise</item>

    <item name="circleBackground">@drawable/background_circle_turquoise</item>
</style>

<style name="Theme.ColorScheme.Blue" parent="AppTheme">
    <item name="designBase400">@color/design_base_400_blue</item>
    <item name="designBase500">@color/design_base_500_blue</item>
    <item name="designBase700">@color/design_base_700_blue</item>

    <item name="circleBackground">@drawable/background_circle_blue</item>
</style> <!-- and so on ... -->