Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在GradientDrawable上设置颜色无法从片段开始工作_Java_Android_Android Fragments - Fatal编程技术网

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);