Java 在GradientDrawable上设置颜色无法从片段开始工作
我有这样一个背景图:Java 在GradientDrawable上设置颜色无法从片段开始工作,java,android,android-fragments,Java,Android,Android Fragments,我有这样一个背景图: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:bottom="80dp" android:id="@+id/card_background"> <shape> <solid and
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:bottom="80dp"
android:id="@+id/card_background">
<shape>
<solid android:color="@color/x_card_color_pink"
android:height="100dp"/>
<corners
android:topLeftRadius="10dp"
android:topRightRadius="10dp"/>
</shape>
</item>
<item android:top="120dp">
<shape>
<solid android:color="@color/white"
android:height="100dp"/>
<corners
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"/>
</shape>
</item>
</layer-list>
但是,如果尝试从同样显示背景的片段设置,我无法更改它。我希望以后能够在clickhandler中实现这一点,但现在我在片段onCreate
中使用了相同的代码:
LayerDrawable layerDrawable = (LayerDrawable) ContextCompat.getDrawable(getActivity(), R.drawable.card_background);
GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.card_background);
gradientDrawable.setColor(0xFF5ABC63); //Fail to set to green from fragment
我在想,既然我在更新它的同时显示了片段,我就必须刷新它或做些什么?我尝试了使自己无效的方法,但没有效果
有没有关于如何更改片段背景颜色的想法?哦,我找到了一个解决方案:
LayerDrawable layerDrawable = (LayerDrawable) ContextCompat.getDrawable(getActivity(), R.drawable.card_background);
GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.card_background);
gradientDrawable.setColor(0xFF5ABC63);
RelativeLayout layout = (RelativeLayout) rootView.findViewById(R.id.card_layout);
layout.setBackground(layerDrawable);
如果我再次将绘图设置为我的布局,它会更新背景。通过
layerDrawble=layout.getBackground()
初始化layerDrawble
也可以工作,而且更简单。
LayerDrawable layerDrawable = (LayerDrawable) ContextCompat.getDrawable(getActivity(), R.drawable.card_background);
GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.card_background);
gradientDrawable.setColor(0xFF5ABC63);
RelativeLayout layout = (RelativeLayout) rootView.findViewById(R.id.card_layout);
layout.setBackground(layerDrawable);