Androidのフローティングアクションボタンの色の変更


532

マテリアルのフローティングアクションボタンの色を変更しようとしていますが、成功しませんでした。

<android.support.design.widget.FloatingActionButton
    android:id="@+id/profile_edit_fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_margin="16dp"
    android:clickable="true"
    android:src="@drawable/ic_mode_edit_white_24dp" />

追加しようとしました:

android:background="@color/mycolor"

またはコード経由:

FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.profile_edit_fab);
fab.setBackgroundColor(Color.parseColor("#mycolor"));

または

fab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#mycolor")));

しかし、上記のどれもうまくいきませんでした。提案された重複質問の解決策も試しましたが、どれも機能しません。ボタンは緑色のままで、正方形にもなりました。

PS波及効果を追加する方法も知っておくとよいでしょう。それも理解できませんでした。



新しいRenderThreadを利用しているため、プリロリポップデバイスではリップル効果は利用できません。
tachyonflux 2015年

@karaokyo大丈夫ですがどうやってやるの?
チャン

27
グーグルはこれらのことをアクセシブルにするために私の意見では本当に悪い仕事をしています
Joop

これをプログラムで実行し、下位互換性を保つには、stackoverflow.com
Ralph Pina

回答:


1050

ドキュメントで説明されているように、デフォルトでは、styles.xml属性colorAccentに設定されている色が使用されます。

このビューの背景色のデフォルトは、テーマのcolorAccentです。これを実行時に変更する場合は、setBackgroundTintList(ColorStateList)を使用して変更できます。

色を変更したい場合

  • 属性app:backgroundTintを持つ XML
<android.support.design.widget.FloatingActionButton
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_add"
    app:backgroundTint="@color/orange"
    app:borderWidth="0dp"
    app:elevation="6dp"
    app:fabSize="normal" >
  • .setBackgroundTintListを使用したコード(以下のywwynmによる回答

@Dantalianがコメントで述べたように、デザインサポートライブラリのアイコンの色をv22(包括的)まで変更したい場合は、

android:tint="@color/white"     

使用できるv23以降の設計サポートライブラリ:

app:tint="@color/white"   

また、androidXライブラリでは、XMLレイアウトで0dpボーダーを設定する必要があります。

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_add"
    app:backgroundTint="@color/orange"
    app:borderWidth="0dp"
    app:elevation="6dp"
    app:fabSize="normal" />

24
これは、<API 12デバイスのDesign Support Library v23では機能しません。それはv22で動作していたので、明らかに何かを壊しました。
-hungryghost

4
たとえば、画像の色も白に変更したい場合は、次のように使用できます。android:tint = "@ android:color / white"
Dantalian

1
android:tint = "@ color / white"は、何らかの理由で解決できなかったため、動作しませんでした。android:tint = "
#ffffff

2
これは、colors.xmlに@ color / whiteが存在しないためです。@android:color / whiteを使用するか、whiteまたは必要な名前のカラーを作成します
Dantalian

227
「android:backgroundTint」ではなく「app:backgroundTint」を使用してください
Vasil Valchev

244

Vijet Badigannavarの答えは正しいですが、使用ColorStateListは通常複雑であり、彼はそれを行う方法を教えていませんでした。View通常の状態と押された状態でのの色の変更に焦点を合わせることが多いため、詳細を追加します。

  1. FAB通常の状態での色を変更したい場合は、次のように書くことができます

    mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
  2. FAB押された状態での色を変更したい場合は、Design Support Library 22.2.1に感謝します。

    mFab.setRippleColor(your color in int);

    この属性を設定すると、を長押しFABすると、タッチポイントに色の波紋が現れ、の全面に現れますFABFAB通常の状態ではの色は変わりませんのでご注意ください。API 21(Lollipop)の下では、波及効果はありませFABんが、押したときの色は変わります。

最後に、状態に対してより複雑な効果を実装したい場合は、を深く掘り下げる必要があります。ColorStateListこれについて説明するSOの質問です。ColorStateListをプログラムで作成するにはどうすればよいですか?

更新: @Kaitlynのコメントをありがとう。色としてbackgroundTintを使用してFABのストロークを削除するにapp:borderWidth="0dp"は、xmlで設定できます。


3
このおかげで、ColorStateListの使い方がわかりませんでした。ただし、コードでは、テーマのアクセントカラーのストローク(アウトライン)がFABに残ります。ストロークを削除(または色を変更)して、FABをその特別な色がアクセントカラーであるように見える特別な色で使用する方法を知っていますか?
Kaitlyn Hanrahan

@KaitlynHanrahan私のアップデートを見てください。ご意見ありがとうございます。
ywwynm 2015

それは完璧に機能します-LollypopとKitkatは同じように見えますが、どちらもわずかなシェーディングであるため、FABは背景の同じ色に対してポップします(ツールバーの上に部分的に配置しています)。本当にありがとう!それは簡単ですが、自分でそれを見つけたかどうかはわかりません。
Kaitlyn Hanrahan

app:borderWidthプログラムで設定する方法はありますか?ありがとう
–tarke

@Štarkeさて、のソースコードを確認したところFloatingActionButton、のセッターがないため、現在プログラムで設定することはできませんmBorderWidth
ywwynm

124

以下のようヴァシルValchevはコメントで指摘見た目より簡単ですが、私は私のXMLには気付いていなかったという微妙な違いがあります。

<android.support.design.widget.FloatingActionButton
    android:id="@+id/profile_edit_fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_margin="16dp"
    android:clickable="true"
    android:src="@drawable/ic_mode_edit_white_24dp"
    app:backgroundTint="@android:color/white"/>

次のことに注意してください。

app:backgroundTint="@android:color/white"

そしてありません

android:backgroundTint="@android:color/white"

7
これらは2つの完全に異なるものですので、これは重要です:android:backgroundTint=""からであるAPIレベル21とロリポップ材料設計の一部とロリポップの下に無視されます。またFAB、無地ではありませんので完全に変色しません。あなたはapp:それを動作させるために1つを使用する必要があります。
creativecreatorまたは

1
おかげで、使用android:colorするとアプリがクラッシュしました。私のアプリと私の正気の残されたものを保存してくれてありがとう;-)
Kapenaar 2017年

@Kapenaarは問題ありませんでした。気づく前にしばらく頭を悩ませていました;)
HenriqueMS

Java側ではXMLにapp:やandroid:のような違いがないため、これはプログラム的にどのように機能しますか。
marienke

@marienkeあなたはそれをColorStatesListで設定し、新しい質問を投稿し、ここにリンクを投稿して、答えられるようにすることができます;)
HenriqueMS

58

アプリでFABの色を変えようとすると、問題が発生します。ボタンのフレームは異なる色を持っているので、あなたがしなければならないこと:

app:backgroundTint="@android:color/transparent"

コードで色を設定します:

actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));

2
これは通常の色で動作します。#44000000のようなアルファカラーを指定した場合、フレームカラーの問題は再現可能です。
Dinesh

5
getResources.getColor()は非推奨です。ContextCompat.getColor(context、your colour);の使用を検討してください。代わりに。それがお役に立てば
幸い

51

ただ使う

app:backgroundTint="@color/colorPrimary"

使用しないでください、

android:backgroundTint="@color/colorPrimary"

hmmmm this cause android studio autocomplete give result use android:backgroundTint、this Answer verry good
karma

31

FABはに基づいて色分けされますcolorAccent

<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
    <item name="colorAccent">@color/accent</item>
</style>

まあ、デフォルトの色は緑ではありません。どこに緑色を設定しましたか?
tachyonflux 2015年

1
私はしませんでした。ご覧のように、このXMLは...私はボタンのレイアウトを設定する唯一の場所である
Jjang

たぶん、FABだけで新しいプロジェクトを作成し、全体のコードを投稿する必要があります。
tachyonflux 2015年

3
うわー...私は基本的にあなたに同じことをするように頼みました、そしてあなたはそれをする気がありませんでした。あなたのコードが適切であると信じることはあなたの非常に偽善的ですが、あなたのコードへの私の追加は適切ではありません。MCVEを作成するのは質問者の責任です。ありがとう。
tachyonflux 2015年

2
もうありません。テーマの属性マッピングに基づいて、フローティングアクションボタン(自分で確認した)がcolorSecondarycom.google.android.material:material:1.1.0-alpha02)に
色分けされました


16

他の解決策が機能する場合があります。これは10ポンドのゴリラアプローチで、このケースや類似のケースで広く適用できるという利点があります。

Styles.xml:

<style name="AppTheme.FloatingAccentButtonOverlay" >
    <item name="colorAccent">@color/colorFloatingActionBarAccent</item>
</style>

レイアウトxml:

<android.support.design.widget.FloatingActionButton
       android:theme="AppTheme.FloatingAccentButtonOverlay"
       ...
 </android.support.design.widget.FloatingActionButton>

うーん、これはうまくいくようですが、レイアウトファイルでコンパイラエラーが発生しますString types not allowed (at 'theme' with value 'AppTheme.FloatingAccentButtonOverlay')。多分私はstyles.xml ....のポイントが足りない
Scott Biggs

@ScottBiggsは使用してandroid:theme="@style/AppTheme.FloatingAccentButtonOverlay"いますが、このソリューションはどちらの方法でも機能しません...
jpact

coloarAccent属性がないAPI 16についてはどうですか?
Dushyant Suthar 2017

12

このドキュメントは、デフォルトで@ color / accentを取ることを示唆しています。しかし、次のコードを使用してコードでオーバーライドできます。

fab.setBackgroundTintList(ColorStateList)

また覚えておいてください、

このライブラリを使用するための最小APIバージョンは15なので、更新する必要があります!したくない場合は、カスタムドローアブルを定義して装飾する必要があります。


動作しますが、その後、API 21以上をターゲットにする必要があります。私がapi 8をターゲットにしている場合、このメソッドを呼び出すことができません。
チャン

google "com.android.support:design:22.2.0"からリリースされたこのデザインライブラリを含めるだけです。これは非ロリポップバージョンのデバイスで使用できます!乾杯!!
Vijet Badigannavar 2015年

もちろんそうですが、これはこのコードのエラーです:呼び出しにはAPIレベル21(現在の最小値は8)が必要です:android.widget.ImageView#setBackgroundTintList
Jjang

このライブラリを使用するための最小APIバージョンは15なので、更新する必要があります!したくない場合は、カスタムドローアブルを定義して装飾する必要があります。
Vijet Badigannavar 2015年

ああ、ありがとう!私は知らなかった、これはエラーが言ったことだから21だと思った。これを回答として投稿してください、私はそれを受け入れます!
Jjang 2015年

10

下の行を使用してフローティングアクションボタンの背景色を変更する

app:backgroundTint="@color/blue"

フローティングアクションボタンのアイコンの色の変更

android:tint="@color/white"     

8

オートコンプリートに感謝します。私はいくつかのヒットとトライアルの後に幸運になりました:

    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    card_view:backgroundTint="@color/whicheverColorYouLike"

-または-(どちらも基本的に同じものです)

    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:backgroundTint="@color/whicheverColorYouLike"

これは、設計ライブラリ23.1.0を使用するAPIバージョン17で私に役立ちました。


8

私は同じ問題を抱えており、そのすべてが私の髪をひったくっています。これをありがとう https://stackoverflow.com/a/35697105/5228412

私たちにできること..

 favourite_fab.setImageDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.favourite_selected));

それは私にとってはうまく機能し、ここに到達する他の人たちのために願っています。


これは理論的には質問に答える可能性がありますが、答えの本質的な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
Bhargav Rao

8
 <android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    app:elevation="6dp"
    app:backgroundTint="@color/colorAccent"
    app:pressedTranslationZ="12dp"
    android:layout_margin="@dimen/fab_margin"
    android:src="@drawable/add"/>

res / values / color.xmlに色を追加し、fabに属性を含めることに注意してください

   app:backgroundTint="@color/addedColor"

8

素材テーマ素材の部品 FloatingActionButton、デフォルトではそれがに設定された色取りstyles.xml属性をcolorSecondary

  • このapp:backgroundTint属性はxmlで使用できます。
<com.google.android.material.floatingactionbutton.FloatingActionButton
       ...
       app:backgroundTint=".."
       app:srcCompat="@drawable/ic_plus_24"/>
  • 使用できます fab.setBackgroundTintList();

  • <item name="backgroundTint">属性を使用してスタイルをカスタマイズできます

  <!--<item name="floatingActionButtonStyle">@style/Widget.MaterialComponents.FloatingActionButton</item> -->
  <style name="MyFloatingActionButton" parent="@style/Widget.MaterialComponents.FloatingActionButton">
    <item name="backgroundTint">#00f</item>
    <!-- color used by the icon -->
    <item name="tint">@color/...</item>
  </style>
  • マテリアルコンポーネントのバージョン1.1.0以降では、新しいmaterialThemeOverlay属性を使用して、一部のコンポーネントのみのデフォルトの色を上書きできます。
  <style name="MyFloatingActionButton" parent="@style/Widget.MaterialComponents.FloatingActionButton">
    <item name="materialThemeOverlay">@style/MyFabOverlay</item>
  </style>

  <style name="MyFabOverlay">
    <item name="colorSecondary">@color/custom2</item>
    <!-- color used by the icon -->
    <item name="colorOnSecondary">@color/...</item>
  </style>

ここに画像の説明を入力してください


7

マテリアル1.1.0のフローティングアクションボタンの新しいテーマ属性マッピング

アプリのテーマ:

  • colorSecondaryを設定して、FABの背景の色を設定します(backgroundTintにマップします)。
  • colorOnSecondaryを設定して、アイコン/テキストの色とFABのリップルカラーを設定します(色合いとリップルカラーにマップします)。

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <!-- ...whatever else you declare in your app theme.. -->
    <!-- Set colorSecondary to change background of FAB (backgroundTint) -->
    <item name="colorSecondary">@color/colorSecondary</item>
    <!-- Customize colorSecondary to change icon/text of FAB (maps to tint and rippleColor) -->
    <item name="colorOnSecondary">@android:color/white</item>
</style>

最後に、FABの背景と前景(アイコン)の色の簡単な解決策を提供する人。
ManuelTS


3

私はこのようにしましたandroid:background = "@ color / colorAccent"私は単にフォルダーresに移動し、フォルダー値をクリックしてから、colors.xmlのcolors.xmlをクリックしますcolorAccentの色を変更してandroid:backgroundで呼び出しますそしてそれが終わった


2

不足している点は、ボタンの色を設定する前に、この色に必要な値に取り組むことが重要であることです。したがって、値>色に移動できます。デフォルトのものが見つかりますが、それらをコピーして貼り付け、色と名前を変更して色を作成することもできます。次に、(activity_main内の)フローティングボタンの色を変更するときに、作成したものを選択できます。

例-値のコード>デフォルトの色+私が作成した3色の色:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>

    <color name="corBotaoFoto">#f52411</color>
    <color name="corPar">#8e8f93</color>
    <color name="corImpar">#494848</color>

</resources>

これで、「corPar」という名前で名前を付けたフローティングアクションボタンができました。

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_input_add"
        android:tint="#ffffff"
        app:backgroundTint="@color/corPar"/>

それは私のために働いた。幸運を!


1

ドローアブルのないフローティングアクションボタンがある場合、プログラムを使用してティントを変更できます。

fab.getBackground().mutate().setTint(ContextCompat.getColor(yourContext, R.color.anyColor));

それが私が探していた解決策です。私はbackgrountTintを備えた単純なファブを持っていて、これが見つかるまでプログラムで変更する方法を見つけることができませんでした。
リダリング

0

color.xmlファイルに色を追加する

color.xmlファイルに色を追加してから、次のコード行を追加します... floatingActionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.fab2_color)));


0

プログラムで色を変更する場合は、このコードを使用できます

floating.setBackgroundTintList(getResources().getColorStateList(R.color.vermelho));

0

使用する

app:backgroundTint = "@ color / orange"


<com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/id_share_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/share"
        app:backgroundTint="@color/orange"
        app:fabSize="mini"
        app:layout_anchorGravity="end|bottom|center" />



</androidx.coordinatorlayout.widget.CoordinatorLayout>

0

マテリアルデザインの場合、フローティングアクションボタンの色を次のように変更しました。フローティングアクションボタンのxmlに以下の2行を追加します。そして、

 android:backgroundTint="@color/colorPrimaryDark"
 app:borderWidth="0dp"

0

コトリンで:

val gray = getColor(requireContext(), R.color.green)
binding.fabSubmit.backgroundTintList = ColorStateList.valueOf(gray)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.