我试图为我应用的主题定义自定义颜色。 我是这样做的:
定义自定义属性:
<declare-styleable name="ApplicationStyle">
<attr name="colorWeekdaysBg" format="color"/>
</declare-styleable>
定义应用程序样式:
<style name="ApplicationStyle" parent="Theme.AppCompat.NoActionBar">
<item name="android:editTextStyle">@style/EditTextStyle</item>
<item name="colorPrimaryDark">@color/dark_blue</item>
<item name="colorPrimary">@color/dark_blue</item>
<item name="colorAccent">@color/dark_blue</item>
<item name="colorWeekdaysBg">@color/access_weekdays</item>
</style>
在清单中设置样式:
<application
android:name=".App"
android:icon="@drawable/icon_launcher"
android:label="@string/app_name"
android:theme="@style/ApplicationStyle">
在drawable xml中使用此属性:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:right="-1dp">
<shape android:shape="rectangle">
<stroke
android:width="1dp"
android:color="?colorWeekdaysBg" />
<corners
android:bottomLeftRadius="100dp"
android:topLeftRadius="100dp" />
</shape>
</item>
</layer-list>
但由于某种原因,它不会将我的颜色应用于drawable。它适用于透明色。
另一个奇怪的事情是,如果我将?colorWeekdaysBg
替换为?colorAccent
({1}}中定义的Theme.AppCompat
,那么它会应用正确的颜色。
最后一个问题是:你知道它为什么不起作用,以及如何解决它?
答案 0 :(得分:0)
根据 mudit here给出的答案,这是棒棒糖之前的操作系统中的错误。
在Google's Issue Tracker中报告。
在装有Android Lollipop和更高操作系统版本的设备中,它将正常运行。
检查以下代码:
attr.xml
<declare-styleable name="AppTheme">
<attr name="colorWeekdaysBg" format="color|reference" /> <!-- Or you can keep color only. It will be ok -->
</declare-styleable>
您必须在v21样式文件中设置属性。 也许您错过了这个。
v21 \ styles.xml
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:splitMotionEvents">false</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:navigationBarColor">@color/black</item>
<item name="colorWeekdaysBg">@color/access_weekdays</item>
</style>
创建两个可绘制文件,以使其在所有设备上均可工作。一个用于普通即棒棒糖之前的版本,另一个用于棒棒糖及更高版本(即v21可绘制)。
your_drawable.xml 在此,您必须从颜色文件中设置颜色。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:right="-1dp">
<shape android:shape="rectangle">
<stroke
android:width="1dp"
android:color="@color/access_weekdays" />
<corners
android:bottomLeftRadius="100dp"
android:topLeftRadius="100dp" />
</shape>
</item>
</layer-list>
v21 \ your_drawable.xml 在此文件中,您可以像以往一样设置自定义属性。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:right="-1dp">
<shape android:shape="rectangle">
<stroke
android:width="1dp"
android:color="?colorWeekdaysBg" />
<corners
android:bottomLeftRadius="100dp"
android:topLeftRadius="100dp" />
</shape>
</item>
</layer-list>
your_layout.xml 在您的布局中,您可以按如下所示提供该可绘制对象
<Button
android:id="@+id/btnTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/your_drawable"
android:text="Test Text" />
现在检查您问题的答案。
但是由于某种原因,它无法将我的颜色应用于可绘制对象。而是应用透明颜色。
style.xml
文件另一件事是,如果我将
?colorWeekdaysBg
替换为?colorAccent
(在Theme.AppCompat中定义),那么它将应用正确的颜色。
android.view.InflateException: Binary XML file line #68: Error inflating class Button
最后是一个问题:您是否知道为什么它不起作用以及如何解决?