스낵바의 배경색을 변경하는 방법은 무엇입니까?

alertDialog의 Positive click 내 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의보기를 스낵바로 전달하고 있습니다. 배경색을 검정색으로 하시겠습니까? 어떻게 할 수 있습니까? DialogFragment에서 alertDialog를 반환하고 있습니다. 그리고 다음과 같이 대화에 설정하고있는 테마

<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>

대화 상자의 배경색을 흰색으로 설정하고 있지만 스낵바에 배경색을 설정하여 재정의해야합니다.



답변

다음과 같이 배경색을 설정해보십시오.

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

100 % 작동합니다!


답변

당신은 이렇게 할 수 있습니다

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();

답변

모든 스낵바에 대한 배경색을 정의하려면 design_snackbar_background_color리소스의 어딘가에 값을 재정의하면 됩니다. 예를 들면 :

<color name="design_snackbar_background_color" tools:override="true">@color/colorPrimaryLight</color>

답변

다른 답변 중 어느 것도 사용자 정의 스타일 재정의를 제공하지 않았으므로 (가장 안전한 업데이트 방법 중 하나라고 생각합니다) 여기에 내 솔루션을 게시합니다.

나는 이미 새로운 AndroidX(support design 28 ) 테마를 .

응용 프로그램이 그들이라는 사용자 지정 사용을 제공 MyAppTheme당신의를 AndroidManifest.xml:

<application
        android:name=".MyApplicationName"
        android:allowBackup="true"
        android:icon="@mipmap/icon"
        android:roundIcon="@mipmap/icon_round"
        android:label="@string/app_name"
        android:theme="@style/MyAppTheme">

values/style.xml애플리케이션에서 사용하는 테마를 재정의하는 파일을 생성합니다 (아직없는 경우) .

<style name="MyAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/myColorPrimary</item>
    <item name="colorPrimaryDark">@color/myColorPrimaryDark</item>
    <item name="colorAccent">@color/myColorAccent</item>
    <item name="snackbarStyle">@style/MySnackBarStyle</item>
</style>

<!-- snackbar style in res/values -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
    <item name="android:background">@color/mySnackbarBackgroundColor</item>
</style>

values/colors.xml파일에 색상을 제공하십시오.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="myColorPrimary">#008577</color>
    <color name="myColorPrimaryDark">#00574B</color>
    <color name="myColorAccent">#D81B60</color>
    <color name="mySnackbarBackgroundColor">#D81B60</color>
</resources>

업데이트 2020

위의 솔루션은 스낵 커의 둥근 모서리를 제거하므로이 방법으로 배경을 설정하면 레거시 스낵바 디자인을 사용하므로 재료 디자인을 유지할 수 있습니다.

  1. API 21 이상을 대상으로하는 경우

교체 android:backgroundandroid:backgroundTint

<!-- snackbar style in res/values-21/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
    <item name="android:backgroundTint">@color/mySnackbarBackgroundColor</item>
</style>
  1. 당신이 API <21 기존 플로팅 작업을 사용하기로 결정한 경우 다음 API <(21)을 대상으로하는 경우 당신은 당신의 abouve을 설정할 수 MySnackbarStyle고해상도 / 값은-21 / 폴더와 이전 남겨 – 유산 – 당신의 스타일을 고해상도 / 값 폴더.

  2. API <21을 대상으로하고이 하위 API 레벨에서도 스낵바의 재질 스타일을 원하면 다음과 같이 res / values ​​/ 에서 스낵바 스타일을 변경할 수 있습니다 .

<!-- snackbar style in res/values/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
    <item name="android:background">@drawable/my_snackbar_background</item>
</style>

다음과 my_snackbar_background같이 공식 저장소 에서 빌리십시오 .

<!-- in res/drawable/ -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="4dp"/>
    <solid android:color="@color/mySnackbarBackgroundColor"/>
</shape>

다음은 놀이터 저장소 입니다.


답변

Kotlin 버전 ( 확장자 포함 ) :

파일 (예 : SnackbarExtension.kt)에 확장자를 작성하십시오.

fun Snackbar.withColor(@ColorInt colorInt: Int): Snackbar{
   this.view.setBackgroundColor(colorInt)
   return this
}

다음으로 Activity / Fragment에서 다음을 수행 할 수 있습니다.

Snackbar
  .make(coordinatorLayout, message, Snackbar.LENGTH_LONG)
  .withColor(YOUR_COLOR)
  .show()

답변

벨로우 코드는 메시지의 텍스트 색상을 변경하는 데 유용합니다.

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();

두 번째 방법 : 활동 주제를 변경하여 색상을 변경할 수도 있습니다.


답변

너무 늦었지만 누군가가 여전히 도움이 필요한 경우. 다음은 작업 솔루션입니다.

      Snackbar snackbar = Snackbar.make(mainView, text, Snackbar.LENGTH_LONG);
    View snackBarView = snackbar.getView();
    snackBarView.setBackgroundColor(context.getResources().getColor(R.color.btn_background_color));
    snackbar.show();