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
위의 솔루션은 스낵 커의 둥근 모서리를 제거하므로이 방법으로 배경을 설정하면 레거시 스낵바 디자인을 사용하므로 재료 디자인을 유지할 수 있습니다.
- API 21 이상을 대상으로하는 경우
교체 android:background
로android:backgroundTint
<!-- snackbar style in res/values-21/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:backgroundTint">@color/mySnackbarBackgroundColor</item>
</style>
-
당신이 API <21 기존 플로팅 작업을 사용하기로 결정한 경우 다음 API <(21)을 대상으로하는 경우 당신은 당신의 abouve을 설정할 수
MySnackbarStyle
에 고해상도 / 값은-21 / 폴더와 이전 남겨 – 유산 – 당신의 스타일을 고해상도 / 값 폴더. -
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();