如何在Android中以编程方式更改形状的纯色?

Edw*_*ard 6 android shape android-imagebutton

我试图改变solid的颜色shape在我的Fragment

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/icon_circle_background">
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            ...>
            <solid android:color="@color/md_cyan_400"/>
        </shape>
    </item>
    <item
        ...
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

我似乎无法从我的代码中访问它,而且我已经尝试了以下有关堆栈溢出的答案:

以编程方式设置android形状颜色

如何动态改变形状颜色?

在用作背景的 Drawable xml 中在运行时更改形状纯色

这些都不起作用或已经过时了。

我尝试更改颜色的片段:

public class GameFragment extends Fragment {
    private Theme currentTheme;
    private Circle currentCircle;
    private int currentOrganisationId;
    private List<Card> circleCards;
    private List<ImageButton> circleButtons;
    private int viewHeight;
    private int viewWidth;
    private int marginCard;
    private int[] tableStarts;
    private RelativeLayout background;
    private ViewTreeObserver vto;

    public GameFragment() {
        circleCards = new ArrayList<>();
        circleButtons = new ArrayList<>();
        tableStarts = new int[9];
    }

    //...

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_game, container, false);
        ...
        background = setBackground(rootView);
        circleCards = currentCircle.getCards();

        return rootView;
    }

    //...

    private void drawCards() {
        circleButtons = new ArrayList<>();
        for (Card card : circleCards) {
            ImageButton myImageButton = new ImageButton(this.getContext()); //generate ImageButton
            myImageButton.setId(card.getCardId()); //Set Id of button
            myImageButton.setBackgroundResource(R.drawable.circle_card_icon);

            //set random color to shape
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Leo*_*Dev 1

View v = findViewById(R.id.layout_id);
LayerDrawable shape= (LayerDrawable)v.getBackground();
shape.setColor(Color.Black);
Run Code Online (Sandbox Code Playgroud)