繁体   English   中英

在 GradientDrawable 上设置颜色不适用于 Fragment

[英]Set color on GradientDrawable not working from Fragment

我有一个这样的背景可绘制:

<?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>

我想改变card_background的颜色。 当我从onCreate活动设置新颜色时,它可以工作:

    LayerDrawable layerDrawable = (LayerDrawable) ContextCompat.getDrawable(this, R.drawable.card_background);
    GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.card_background);
    gradientDrawable.setColor(0xFFEBC51B); //Successfully set to yellow from activity

但是,如果尝试从也显示背景的片段中设置它,我无法更改它。 我希望稍后能够在 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

我在想,既然我在更新片段的同时显示片段,我必须刷新它还是什么? 我尝试了方法invalidateSelf但没有效果。

关于如何从 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);

如果我再次将 drawable 设置为我的布局,它会更新背景。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM