web-dev-qa-db-ja.com

colorAccentを変更せずにMaterialButtonの背景色を変更することはできません

Android Studio 3.2.1ここに私のレイアウト:

<com.google.Android.material.button.MaterialButton
                Android:id="@+id/bittrexJsonViewButton"
                Android:layout_width="0dp"
                Android:layout_height="@dimen/min_height"
                Android:layout_marginStart="@dimen/half_default_margin"
                Android:layout_marginEnd="@dimen/half_default_margin"
                Android:text="@string/json_view"
                app:layout_constraintBottom_toBottomOf="@+id/binanceJsonViewButton"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/binanceJsonViewButton"
                app:layout_constraintTop_toTopOf="@+id/binanceJsonViewButton" />

変更するにはMaterialButton's背景変更colorAccentstyles.xml

<item name="colorAccent">@color/colorAccent</item>

いいね。それは仕事です。

しかし、問題は次のとおりです。変更したくないcolorAccentMaterialButton'sに背景色を使用したいcolorAccentとは異なる

属性:

Android:background="#aabbcc"

助けません。

12
a_subscriber

最初のソリューション

app:backgroundTintを使用して、MaterialButtonの背景色を変更できます

<com.google.Android.material.button.MaterialButton
                Android:id="@+id/bittrexJsonViewButton"
                Android:layout_width="0dp"
                Android:layout_height="@dimen/min_height"
                Android:layout_marginStart="@dimen/half_default_margin"
                Android:layout_marginEnd="@dimen/half_default_margin"
                app:backgroundTint="@Android:color/holo_orange_dark"
                Android:text="@string/json_view"
                app:layout_constraintBottom_toBottomOf="@+id/binanceJsonViewButton"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/binanceJsonViewButton"
                app:layout_constraintTop_toTopOf="@+id/binanceJsonViewButton" />

2番目のソリューション

MaterialButtonは、ボタンがアクティブな状態の場合はcolorPrimaryを背景として使用し、無効の場合はcolorOnSurfaceを使用します。だから、あなたはそれをあなたのテーマで定義して、それをマテリアルボタンに適用することができます

12
Zaid Mirza

新しい Material Button では、2つのオプションがあります。

  1. Zaid Mirzaの提案に従ってbackgroundTint属性を使用する

  2. それは私の意見では最良の選択肢です。デフォルトのスタイルからいくつかのテーマ属性を上書きしたい場合は、新しいmaterialThemeOverlay属性を使用できます。

何かのようなもの:

<style name="MtButtonStyle"
 parent="Widget.MaterialComponents.Button">
   <item name=“materialThemeOverlay”>@style/GreenButtonThemeOverlay</item>
</style>

<style name="GreenButtonThemeOverlay">
  <item name="colorPrimary">@color/green</item>
</style>

ライブラリのバージョン1.1.0が必要です。

10

2020:2020年4月1日にこれを修正したようです。

GitHubの問題が「修正済み」 としてクローズされたため、1.2.0ベータ1でリリースされる予定です。

0