ボタンの背景が に設定されているshape drawable
場合、 を呼び出すことでプログラムで実行できます
(GradientDrawable) findDrawableByd(R.drawable.some_shape).setColor(someColor);
。
に設定されている場合はlayer-list drawable
、呼び出して色を変更できます
LayerDrawable someLayerList = (LayerDrawable) getResources().getDrawable(R.drawable.someLayerList);
((GradientDrawable) someLayerList.findDrawableByLayerId(R.id.someShape)).setColor(someColor);
もう一段深く行きたい。セレクター内に存在するレイヤーリスト内に存在する形状ドローアブルの色をプログラムで設定するにはどうすればよいですか?
上記のコード スニペットを使用すると、動作します。実際には非常にバグがあるように見えます。ボタンの色を順番に変更する複数のダイアログフラグメントを設定しています。最初の dialogFragment は常に適切に色付けされますが、残りは通常そうではありません。ボタンの背景がレイヤーリストに設定されている場合、すべてが完全に機能することを強調したいと思います。セレクターに設定すると、バグが発生します。