114

アラート ダイアログの肯定的なタッチで表示しsnackbarています。DialogFragmentここに私のコードスニペットがあります:

Snackbar snackbar = Snackbar.make(view, "Please enter customer name", Snackbar.LENGTH_LONG)
                .setAction("Action", null);
View sbView = snackbar.getView();
sbView.setBackgroundColor(Color.BLACK);
snackbar.show();

ご覧のとおり、私のスナックバーの背景色は白色を示しています

のビューをDialogFragmentスナックバーに渡します。背景色は黒にしたいです。これどうやってするの?で返品しalertDialogていDialogFragmentます。そして、私がダイアログに設定しているテーマは次のとおりです。

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">

    <!-- Used for the buttons -->
    <item name="colorAccent">@color/accent</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">@color/primary</item>
    <!-- Used for the background -->
    <item name="android:background">@color/white</item>
</style>

ダイアログの背景色を白に設定していますが、背景色をスナックバーに設定することでオーバーライドする必要があります。

4

18 に答える 18

192

次のように背景色を設定してみてください。

sbView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.BLACK));

それは 100% 動作します!

于 2016-02-28T17:42:00.970 に答える
93

あなたはこのようにすることができます

Snackbar snackbar;
snackbar = Snackbar.make(view, "Message", Snackbar.LENGTH_SHORT);
View snackBarView = snackbar.getView();
snackBarView.setBackgroundColor(yourColor);
TextView textView = (TextView) snackBarView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(textColor);
snackbar.show();
于 2015-12-01T12:54:09.490 に答える
21

すべてのスナックバーの背景色を定義したい場合design_snackbar_background_colorは、リソースのどこかで値をオーバーライドしてください。例えば:

<color name="design_snackbar_background_color" tools:override="true">@color/colorPrimaryLight</color>
于 2018-04-21T14:58:16.473 に答える
14

次のコードは、メッセージのテキストの色を変更するのに役立ちます。

Snackbar snackbar = Snackbar.make(rootView, "Enter Your Message",Snackbar.LENGTH_SHORT);
View view = snackbar.getView();
TextView tv = (TextView)view.findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.RED);
snackbar.show();

第 2 の方法: アクティビティのテーマを変更して、色を変更することもできます。

于 2016-09-13T11:25:55.083 に答える
4

xamarin android を使用しているときに、ContextCompat.GetColor() は Int を返しますが、setBackgroundColor() は Color 型のパラメーターを想定していることがわかりました。だから、これが私のxamarin androidプロジェクトでどのように機能するかです。

Snackbar snackbarview =  Snackbar.Make(toolbar, message, Snackbar.LengthLong);
View snckView = snackbarview.View;                
snckView.SetBackgroundColor(Color.ParseColor(GetString(Resource.Color.colorPrimary)));
snackbarview.Show();
于 2018-11-17T03:58:45.423 に答える
4

アプリからカスタム カラーのスナックバーを簡単に作成できるように、小さな utils クラスを作成しました。

package com.yourapppackage.yourapp;

import android.support.design.widget.Snackbar;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class SnackbarUtils {

    private int BACKGROUND_COLOR;
    private int TEXT_COLOR;
    private int BUTTON_COLOR;
    private String TEXT;


    public SnackbarUtils(String aText, int aBgColor, int aTextColor, int aButtonColor){
        this.TEXT = aText;
        this.BACKGROUND_COLOR = aBgColor;
        this.TEXT_COLOR = aTextColor;
        this.BUTTON_COLOR = aButtonColor;
    }

    public Snackbar snackieBar(){
        Snackbar snackie = Snackbar.make(MainActivity.getInstance().findViewById(android.R.id.content), TEXT, Snackbar.LENGTH_LONG);
        View snackView = snackie.getView();
        TextView snackViewText = (TextView) snackView.findViewById(android.support.design.R.id.snackbar_text);
        Button snackViewButton = (Button) snackView.findViewById(android.support.design.R.id.snackbar_action);
        snackView.setBackgroundColor(BACKGROUND_COLOR);
        snackViewText.setTextColor(TEXT_COLOR);
        snackViewButton.setTextColor(BUTTON_COLOR);
        return snackie;
    }
}

次に、アプリ内の任意の場所で次のように使用します。

new SnackbarUtils("This is the text displayed", Color.RED, Color.BLACK, Color.YELLOW).snackieBar().setAction("OTAY", v -> { 
     //donothing
     }).show();
于 2016-11-06T03:16:08.750 に答える
2

それをユーティリティクラスに入れます:

public class Utility {
    public static void showSnackBar(Context context, View view, String text) {
        Snackbar sb = Snackbar.make(view, text, Snackbar.LENGTH_SHORT);
        sb.getView().setBackgroundColor(ContextCompat.getColor(context, R.color.colorAccent));
        sb.show();
    }
}

次のように使用します。

Utility.showSnackBar(getApplicationContext(), findViewById(android.R.id.content), "Add success!!!");
于 2016-11-21T02:53:21.783 に答える