我有一个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。
答案 0 :(得分:0)
可绘制目录中是否存在@drawable/circlebutton
?错误表示未找到此圆圈按钮,可能不存在资源。