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

标签 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 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 Activity 中设置新颜色时,它起作用了:

    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

但是,如果尝试从也显示背景的 fragment 中设置它,我无法改变它。我希望稍后能够在 clickhandler 中执行此操作,但现在我在 fragment 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

我在想,因为我在更新 fragment 的同时显示 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);

如果我再次将可绘制对象设置为我的布局,它会更新背景。

关于java - 在 GradientDrawable 上设置颜色不适用于 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34428216/

相关文章:

java - 如何在 Android 中使用 Wifi 获取位置信息?

java - 打印不带括号和逗号的数组

android - 如何隐藏顶部Fragment中的 "Up button"并显示在其他Fragment中?

java - Android fragment - 按下 fragment 中的文本后出现 "Activity has been destroyed"

java - @Before/@BeforeClass 似乎不起作用,对象指示为空

java - Java 中的 SSL 超重

java - GAE 作为桌面应用程序 (Swing) 的服务提供者

android - 如何获得所选国家的国定假日

java - Android 滑动标签 - 以编程方式设置标签的宽度

android - IllegalStateException:DialogFragment 无法附加到容器 View -(在 ActionBarActivity 中)