如何使用RelativeLayout中的样式引用drawable中的颜色

时间:2016-11-01 14:59:51

标签: android xml android-layout android-drawable xml-attribute

我有一个RelativeLayout,背景是一个有参考颜色的drawable。我想根据样式改变drawable中的颜色。

我尝试了2个选项,但其中任何一个都在运行:

选项1:

RelativeLayout

<RelativeLayout
    style="@style/pink"
    android:background="@drawable/circlebutton"
    android:layout_width="wrap_content"
    android:layout_alignParentLeft="true"
    android:id="@+id/circlebutton_image_map"
    android:layout_height="wrap_content">
            <ImageView
                android:layout_marginTop="20sp"
                android:layout_centerHorizontal="true"
                android:layout_alignParentTop="true"
                android:layout_width="@dimen/icon_size"
                android:layout_height="@dimen/icon_size"
                android:src="@drawable/map_verdelab"/>
</RelativeLayout>

样式(res / values / styles.xml)

<style name="pink">
    <item name="normalcolor">@color/rosa_normal</item>
    <item name="lightcolor">@color/rosa_light</item>
    <item name="shadowcolor">@color/rosa_letter_shadow</item>
</style>

可绘制(res / drawable / circlebutton.xml)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
    <layer-list >

        <item>
            <shape android:shape="oval">
                <size android:width="200sp" android:height="200sp" />

            </shape>
        </item>
        <item android:top="12sp" android:left="12sp" android:right="6sp" android:bottom="6sp">
            <shape android:shape="oval">
                <solid android:color="?shadowcolor"/>
            </shape>
        </item>
        <item android:top="12sp" android:left="12sp" android:right="8sp" android:bottom="8sp">
            <shape android:shape="oval">
                <gradient android:angle="315" android:startColor="?lightcolor" android:centerColor="?normalcolor" android:endColor="?normalcolor" />
            </shape>
        </item>
    </layer-list>
    </item>
<item  >

    <layer-list >
        <item>
            <shape android:shape="oval">
                <size android:width="200sp" android:height="200sp" />

            </shape>
        </item>
        <item android:top="10sp" android:left="10sp" android:right="6sp" android:bottom="6sp">
            <shape android:shape="oval">
                <solid android:color="?shadowcolor"/>
            </shape>
        </item>
        <!-- Inset -->
        <item android:top="10sp" android:left="10sp" android:right="10sp" android:bottom="10sp">
            <shape android:shape="oval">
                <gradient android:angle="315" android:startColor="?lightcolor" android:centerColor="?normalcolor" android:endColor="?normalcolor" />
            </shape>
        </item>
    </layer-list>
</item>

选项2

Drawable是一样的。我刚刚在android:background

中添加了pink style

RelativeLayout的

<RelativeLayout
    style="@style/pink"
    android:layout_width="wrap_content"
    android:layout_alignParentLeft="true"
    android:id="@+id/circlebutton_image_map"
    android:layout_height="wrap_content">
            ....
</RelativeLayout>

风格

<style name="pink">
    <item name="normalcolor">@color/rosa_normal</item>
    <item name="lightcolor">@color/rosa_light</item>
    <item name="shadowcolor">@color/rosa_letter_shadow</item>
    <item name="android:background">@drawable/circlebutton</item>
</style>

相同的LogCat错误:

         Caused by: android.content.res.Resources$NotFoundException: File res/drawable/circlebutton.xml from drawable resource ID #0x7f020041
                at android.content.res.Resources.loadDrawable(Resources.java:3451)
                at android.content.res.TypedArray.getDrawable(TypedArray.java:614)
                at android.view.View.<init>(View.java:3585)
                at android.view.View.<init>(View.java:3515)
                at android.view.ViewGroup.<init>(ViewGroup.java:464)
                at android.widget.RelativeLayout.<init>(RelativeLayout.java:236)
                at java.lang.reflect.Constructor.constructNative(Native Method) 
                at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
                at android.view.LayoutInflater.createView(LayoutInflater.java:601) 
                at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
                at android.view.LayoutInflater.onCreateView(LayoutInflater.java:676) 
                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:701) 
                at android.view.LayoutInflater.rInflate(LayoutInflater.java:762) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:499) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
                at android.view.View.inflate(View.java:17718) 
                at palmaslab.com.palmap.utils.CircleButton.init(CircleButton.java:66) 
                at palmaslab.com.palmap.utils.CircleButton.<init>(CircleButton.java:36) 
                at java.lang.reflect.Constructor.constructNative(Native Method) 
                at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
                at android.view.LayoutInflater.createView(LayoutInflater.java:601) 
                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:703) 
                at android.view.LayoutInflater.rInflate(LayoutInflater.java:762) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:499) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
                at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:331) 
                at android.app.Activity.setContentView(Activity.java:2018) 
                at palmaslab.com.palmap.activities.MainMenuActivity.onResume(MainMenuActivity.java:291) 
                at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1199) 
                at android.app.Activity.performResume(Activity.java:5526) 
                at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3046) 
                at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3085) 
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2498) 
                at android.app.ActivityThread.access$800(ActivityThread.java:166) 
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) 
                at android.os.Handler.dispatchMessage(Handler.java:102) 
                at android.os.Looper.loop(Looper.java:136) 
                at android.app.ActivityThread.main(ActivityThread.java:5584) 
                at java.lang.reflect.Method.invokeNative(Native Method) 
                at java.lang.reflect.Method.invoke(Method.java:515) 
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
                at dalvik.system.NativeStart.main(Native Method) 
             Caused by: java.lang.UnsupportedOperationException: Ca

我不知道如何仅使用样式将这些颜色引用到drawable。

1 个答案:

答案 0 :(得分:0)

可绘制目录中是否存在@drawable/circlebutton?错误表示未找到此圆圈按钮,可能不存在资源。