14

新しいデザイン サポート ライブラリを試してみて、スナックバーを追加しました。ただし、メインの背景とは異なり、テキスト領域はデフォルト値の で色付けされていません#323232。代わりに、次のようになります。android:backgroundmy のカスタムテーマで定義された値から色を取得しているstyles.xmlようです。これは次のようになります。

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="android:background">#4f4f5e</item>
    ...
</style>

強引に色付けてみたら

View snackbarView = snackbar.getView(); 
snackbarView.setBackgroundColor(Color.YELLOW);

この のようにメインの背景にのみ影響し、テキストの背景は引き続きカスタム テーマによって色付けされます。カスタム テーマを保持し、標準のスナックバーを使用する方法はありますか? ありがとう!

4

10 に答える 10

18

Snackbar の背景色を変更するには、コードから次の操作を実行できます。

Snackbar snack = Snackbar.make(...);
ViewGroup group = (ViewGroup) snack.getView();
group.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));
snack.show();

赤の代わりに、スナックバーのデフォルトの色を使用できます: #323232

于 2015-07-08T22:10:05.893 に答える
7

スナックバーには TextView が含まれているため、両方の背景色を変更する必要があります。スナックバーは既に行った方法で、次に TextView は次のように変更します。

View snackbarView = snackbar.getView(); 
TextView textView = (TextView)snackbarView.findViewById(android.support.design.R.id.snackbar_text); 
textView.setBackgroundColor(Color.YELLOW);
于 2015-12-02T10:02:49.003 に答える
2

独自の Snackbar クラスを作成し、Snackbar の make メソッドをシミュレートするだけです。これを行うには、Android のスナックバー ウィジェットの代わりにこのクラスを使用するだけです。

Snackbar.class

import android.graphics.Color;
import android.support.annotation.IntDef;
import android.support.annotation.IntRange;
import android.support.annotation.NonNull;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.view.View;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

public class Snackbar {

    /** Snackbar's lengths **/
    public static final int LENGTH_SHORT = android.support.design.widget.Snackbar.LENGTH_SHORT;
    public static final int LENGTH_LONG = android.support.design.widget.Snackbar.LENGTH_LONG;
    public static final int LENGTH_INDEFINITE = android.support.design.widget.Snackbar.LENGTH_INDEFINITE;

    @NonNull
    public static android.support.design.widget.Snackbar make(@NonNull View view, @NonNull CharSequence text,
                                                              @Duration int duration) {
        android.support.design.widget.Snackbar snackbar = android.support.design.widget.Snackbar.make(view, text, duration);
        // TODO: This is where you have to customize your snackbar
        snackbar.getView().setBackgroundColor(Color.RED);
        return snackbar;
    }

    @NonNull
    public static android.support.design.widget.Snackbar make(@NonNull View view, @StringRes int resId, @Duration int duration) {
        return make(view, view.getResources().getText(resId), duration);
    }

    // Optional
    @IntDef({LENGTH_INDEFINITE, LENGTH_SHORT, LENGTH_LONG})
    @IntRange(from = 1)
    @Retention(RetentionPolicy.SOURCE)
    public @interface Duration {}

}

使用する:

// WARNING: Make sure you're using your snackbar's package
import com.mypackage.custom_views.Snackbar;

public class MyActivity extends Activity {
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        Snackbar.make(view, R.string.my_msg, Snackbar.LENGTH_LONG).show();
    }
}

お役に立てれば!

于 2016-06-20T14:49:42.903 に答える
2

完全なサンプルは次のとおりです。

Snackbar snack = Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null);
                ViewGroup group = (ViewGroup) snack.getView();
                group.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.blue));
                snack.show();

MainActivity.thisを現在のアクティビティまたは getAppContext() に置き換えます

于 2015-12-07T03:45:48.053 に答える
1

このライブラリを使用できます: https://github.com/SandroMachado/restaurant

new Restaurant(MainActivity.this, "Snackbar with custom background and text color", Snackbar.LENGTH_LONG)
    .setBackgroundColor(Color.GRAY)
    .show();

免責事項: ライブラリを作成しました。

于 2015-11-28T01:05:56.027 に答える
1

これが私がカスタムスナックバーを使用している方法です

  Snackbar snackbar_network = Snackbar.make(rLayout, "Your Message", Snackbar.LENGTH_SHORT)
                        .setAction("EXIT", new View.OnClickListener() {
                            @Override
                            public void onClick(final View v) {


                                  finish();

                            }
                        });

アクション テキストの色

 snackbar_network.setActionTextColor(Color.RED);

アクション メッセージのテキストの色

  final View sbView = snackbar_network.getView();
                final TextView tv = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
                tv.setTextColor(Color.YELLOW);

スナックバーの背景を設定する

sbView.setBackgroundColor(ContextCompat.getColor(MapsActivity.this, R.color.black));

        snackbar_network.show();
于 2016-03-25T13:59:41.243 に答える