次のコードで色をMaterialButtonに変更してみます。
var materialButton = findViewByid(R.id....) as MaterialButton
materialButton.setBackgroundColor( ContextCompat.getColor(this@MyActivity, R.color.myCustomColor));
通常のボタンで動作します。誰かアイデアはありますか?
私は以下のような答えを見つけました:
次の行を変更しました
materialButton.setBackgroundColor( ContextCompat.getColor(this@MyActivity, R.color.myCustomColor));
に
materialButton.setBackgroundTintList(ContextCompat.getColorStateList(this@MyActivity, R.color.myCustomColor));
私はそれをそのようにテストし、それは完全に機能しました。
Material Button内のXMLファイルでこの属性を呼び出すだけです。
Android:backgroundTint=""
これを試してみましょう:
mButton.getBackground().setColorFilter(getResources().getColor(R.color.indian_red), PorterDuff.Mode.SRC_ATOP);
これを試して
Drawable drawable = DrawableCompat.wrap(mButton.getBackground());
drawable.mutate();
DrawableCompat.setTint(drawable, getResources().getColor(R.color.my_color));
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
MaterialButtonの背景を変更するには、colorAccentを変更する必要があります。
Android:background属性は使用しないでください。 MaterialButtonは独自の背景のドローアブルを管理します。新しい背景を設定すると、MaterialButtonは、導入した新しい属性が適切に機能することを保証できなくなります。デフォルトの背景が変更された場合、MaterialButtonは明確に定義された動作を保証できません。
塗りつぶされたボタンの場合、このクラスは、テーマの?attr/colorAccentを背景のティントカラーに使用し、テキストの色にホワイトを使用します。塗りつぶされていないボタンの場合、このクラスはテキストの色に?attr/colorAccentを使用し、背景の色合いに透明を使用します。
materialButton.setBackgroundColor(ContextCompat.getColor(this @ MyActivity、R.color.myCustomColor));