可绘制圆形的图形无法在某些设备上呈现颜色

时间:2019-03-20 15:27:15

标签: android xml-drawable

我在Android中使用可绘制图形时遇到了麻烦,经过几天的深入研究,我决定向您寻求帮助。

为了满足我的需要,我创建了一个可绘制的图像,以在Android Studio的XML布局中使用它(文件名为circle.xml)。代码如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:innerRadius="0dp"
               android:shape="ring"
               android:thicknessRatio="2"
               android:useLevel="false">
            <solid android:color="#BABABE"/>
        </shape>
    </item>
</selector>

这里设置的颜色是通用的,但取决于我使用drawable的情况。 这是我正在使用的ConstraintLayout

<android.support.constraint.ConstraintLayout
                android:id="@+id/constraintLayout11"
                android:layout_width="71dp"
                android:layout_height="71dp"
                android:layout_marginTop="24dp"
                android:background="@drawable/circle"
                android:backgroundTint="#D95F2B"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.5"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">
</android.support.constraint.ConstraintLayout>

我设置了具有以下属性的新颜色:

android:background="@drawable/circle"
android:backgroundTint="#D95F2B"

设置background属性会使圆圈显示在ConstraintLayout中,设置backgroundTint颜色会使圆圈的颜色发生变化。

问题是,在某些设备上,它运行良好,但在某些其他设备上,未应用backgroundTint颜色,圆形仅保留了可绘制对象中设置的颜色。

我知道我可以在活动代码中设置颜色,但这并不是我想要的。

有解决的主意吗?如有需要,随时问我一些问题。

非常感谢!

1 个答案:

答案 0 :(得分:0)

很明显,可绘制的工作应该按原样进行,因此问题出在android:backgroundTint上。

此属性实际上适用于API的> 21,而您可能会遇到某些其他电话类型的怪异行为。

因此,如果您需要一个 generic 圈子来在任何地方使用它,可以采取一些措施:

  • 直接在可绘制的<solid android:color="@color/your_color"/>中使用颜色,看来这对您没有帮助。

  • 使用android:colorBackground属性代替backgroundTint, 然后将其设置为样式,即:

样式:

<style name="YourStyle" parent="YourParent">
        <item name="android:background">@drawable/circle</item>
        <item name="android:colorBackground">@color/your_color</item>
    </style>

样式将与约束布局一起使用。

  • 使用包装视图,即:

Xml:-

<ConstraintLayout
android:background="@drawable/circle"

 <View
 android:background="@color/your_color"
 >
>