如何更改小吃店的背景颜色?
How to change background color of the snackbar?
我在 DialogFragment
中显示 snackbar
在警报对话框的正面触摸中。这是我的代码片段:
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>
虽然我将对话框的背景颜色设置为白色,但它应该通过将背景颜色设置为 snackbar.
来覆盖
你可以这样做
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();
尝试像这样设置背景颜色:
sbView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.BLACK));
它将 100% 有效!
以下代码可用于更改消息的文本颜色。
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();
第二种方式:您也可以通过更改 activity 的主题来更改颜色。
我做了一些小工具 class 所以我可以通过应用程序轻松制作自定义彩色小吃店。
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();
将其放入实用程序中 class:
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!!!");
public class CustomBar {
public static void show(View view, String message, boolean isLong) {
Snackbar s = Snackbar.make(view, message, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT);
s.getView().setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.red_900));
s.show();
}
public static void show(View view, @StringRes int message, boolean isLong) {
Snackbar s = Snackbar.make(view, message, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT);
s.getView().setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.red_900));
s.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();
如果您想为所有 Snackbar 定义背景颜色,只需覆盖资源中某处的 design_snackbar_background_color
值即可。例如:
<color name="design_snackbar_background_color" tools:override="true">@color/colorPrimaryLight</color>
Kotlin 版本(带有 extension):
在文件中创建一个扩展名(例如 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()
在使用 xamarin android 时,我发现 ContextCompat.GetColor() returns Int 但 setBackgroundColor() 需要颜色类型的参数。
所以这就是我如何让它在我的 xamarin android 项目中工作。
Snackbar snackbarview = Snackbar.Make(toolbar, message, Snackbar.LengthLong);
View snckView = snackbarview.View;
snckView.SetBackgroundColor(Color.ParseColor(GetString(Resource.Color.colorPrimary)));
snackbarview.Show();
None 其他解决方案确实对我有用。如果我只设置Snackbar的背景颜色,TextView和Button下的布局是默认颜色。如果我设置 TextView 的背景,它会在显示 SnackBar 后稍微闪烁一下。按钮周围的布局仍然是默认颜色。
最后我发现对我来说最好的方法是更改 TextView 的父级 (SnackbarContentLayout) 的背景颜色。现在整个 Snackbar 都正确着色,并且在显示时不会闪烁。
snack = Snackbar.make(view, text, duration)
View view = snack.getView();
view.setBackgroundColor(BACKGROUND_COLOR);
TextView tv = view.findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(TEXT_COLOR);
((SnackbarContentLayout) tv.getParent()).setBackgroundColor(BACKGROUND_COLOR);
由于 none 的其他答案提供了自定义样式覆盖(我认为这是最安全的更新方式之一)我 post 这里是我的解决方案。
我 post 一个已经解决新 AndroidX
(support design 28
) 主题的解决方案。
假设您的应用程序在您的 AndroidManifest.xml
:
中使用自定义的 MyAppTheme
<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 年更新
由于上述解决方案删除了零食的圆角,因为以这种方式设置背景使用了传统的小吃店设计,如果您想保留 material 设计,您可以。
- 如果您的目标是 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 使用旧版小吃店,您可以在 res/values-21/ 文件夹,并在 res/values 文件夹中保留以前的 — 遗留 — 样式。
如果您的目标人群是 API < 21,并且您希望在较低的 API 级别中也拥有 material 风格的小吃店,您可以更改您的res/values/ 中的小吃店样式是这样的:
<!-- snackbar style in res/values/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@drawable/my_snackbar_background</item>
</style>
然后从 official repo 那里借用你的 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>
2022 年编辑:
如果您只想更改单个 snackbar,而不是整个应用程序,那么您可以使用如下的 ContextThemeWrapper;
ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.CustomSnackbarTheme);
customSnackBar = Snackbar.make(ctw, view, "", Snackbar.LENGTH_LONG);
并在您的样式文件中
<style name="CustomSnackbarTheme">
<item name="snackbarStyle">@style/MySnackBarStyle</item>
</style>
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@android:color/red</item>
</style>
这里是playground repo.
setBackgroundResource()
同样有效。
Snackbar snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG);
View sbView = snackbar.getView();
sbView.setBackgroundResource(R.color.background);
snackbar.show();
基本上,所提供的解决方案有一个缺点。
他们更改了小吃店的形状并删除了半径。
就个人而言,更喜欢这样的东西
val snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG);
val view = snackbar.getView();
val color = view.resources.getColor(colorId)
view.background.colorFilter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP)
使用Material Components Library just use the setBackgroundTint
方法。
Snackbar snackbar = Snackbar.make(view, "Snackbar custom style", Snackbar.LENGTH_LONG);
snackbar.setBackgroundTint(ContextCompat.getColor(this,R.color.secondaryColor));
snackbar.show();
使用 Jetpack Compose 您可以自定义 SnackbarHost
定义自定义 Snackbar
snackbarHost = {
// reuse default SnackbarHost to have default animation and timing handling
SnackbarHost(it) { data ->
Snackbar(
snackbarData = data,
backgroundColor = Color.Red
)
}
},
那就用吧:
scope.launch {scaffoldState.snackbarHostState.showSnackbar("Snackbar text")}
我不知道为什么在我的项目中找不到 setBackgroundColor()。这就是为什么我创建了一个扩展函数,现在没问题了。
fun View.showSnackBar(message: String) {
val snackBar = Snackbar.make(this, message, Snackbar.LENGTH_LONG)
snackBar.setBackgroundTint(ContextCompat.getColor(this.context, R.color.colorAccent))
snackBar.show()
}
并像下面这样称呼它
activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/login_holder_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
// your UI
</FrameLayout>
LoginActivity.kt
login_holder_layout.showSnackBar("Invalid Email")
you can use this code on the material design library
可以用
的方式
创建颜色代码
打开 res/values/colors.xml 并添加这一行
<resources>
<color name="custom_color_name">CustomCode</color>
</resources>
创建 Snackbar 并更改背景
打开您的 activity 或片段并创建 Snackber
Snackbar snackbar= Snackbar.make(root,R.string.imageUploadTitle_error, BaseTransientBottomBar.LENGTH_LONG);
获取 Snackbar 视图
现在您应该在其中获取 SnackbarView 和更改自定义背景
View snackview = snackbar.getView();
更改背景颜色
使用此函数设置快餐栏背景颜色
snackview.setBackgroundColor(ContextCompat.getColor(getActivity() , R.color.error));
显示这个小吃店
现在应该显示 Snackbar
snackbar.show();
这样您就可以看到已更改为自定义颜色的背景
对于 Kotlin:
Snackbar.make(view,"simple text",Snackbar.LENGTH_SHORT).setBackgroundTint(Color.RED).show()
我在 DialogFragment
中显示 snackbar
在警报对话框的正面触摸中。这是我的代码片段:
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>
虽然我将对话框的背景颜色设置为白色,但它应该通过将背景颜色设置为 snackbar.
来覆盖你可以这样做
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();
尝试像这样设置背景颜色:
sbView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.BLACK));
它将 100% 有效!
以下代码可用于更改消息的文本颜色。
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();
第二种方式:您也可以通过更改 activity 的主题来更改颜色。
我做了一些小工具 class 所以我可以通过应用程序轻松制作自定义彩色小吃店。
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();
将其放入实用程序中 class:
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!!!");
public class CustomBar {
public static void show(View view, String message, boolean isLong) {
Snackbar s = Snackbar.make(view, message, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT);
s.getView().setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.red_900));
s.show();
}
public static void show(View view, @StringRes int message, boolean isLong) {
Snackbar s = Snackbar.make(view, message, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT);
s.getView().setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.red_900));
s.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();
如果您想为所有 Snackbar 定义背景颜色,只需覆盖资源中某处的 design_snackbar_background_color
值即可。例如:
<color name="design_snackbar_background_color" tools:override="true">@color/colorPrimaryLight</color>
Kotlin 版本(带有 extension):
在文件中创建一个扩展名(例如 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()
在使用 xamarin android 时,我发现 ContextCompat.GetColor() returns Int 但 setBackgroundColor() 需要颜色类型的参数。 所以这就是我如何让它在我的 xamarin android 项目中工作。
Snackbar snackbarview = Snackbar.Make(toolbar, message, Snackbar.LengthLong);
View snckView = snackbarview.View;
snckView.SetBackgroundColor(Color.ParseColor(GetString(Resource.Color.colorPrimary)));
snackbarview.Show();
None 其他解决方案确实对我有用。如果我只设置Snackbar的背景颜色,TextView和Button下的布局是默认颜色。如果我设置 TextView 的背景,它会在显示 SnackBar 后稍微闪烁一下。按钮周围的布局仍然是默认颜色。
最后我发现对我来说最好的方法是更改 TextView 的父级 (SnackbarContentLayout) 的背景颜色。现在整个 Snackbar 都正确着色,并且在显示时不会闪烁。
snack = Snackbar.make(view, text, duration)
View view = snack.getView();
view.setBackgroundColor(BACKGROUND_COLOR);
TextView tv = view.findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(TEXT_COLOR);
((SnackbarContentLayout) tv.getParent()).setBackgroundColor(BACKGROUND_COLOR);
由于 none 的其他答案提供了自定义样式覆盖(我认为这是最安全的更新方式之一)我 post 这里是我的解决方案。
我 post 一个已经解决新 AndroidX
(support design 28
) 主题的解决方案。
假设您的应用程序在您的 AndroidManifest.xml
:
MyAppTheme
<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 年更新
由于上述解决方案删除了零食的圆角,因为以这种方式设置背景使用了传统的小吃店设计,如果您想保留 material 设计,您可以。
- 如果您的目标是 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 使用旧版小吃店,您可以在 res/values-21/ 文件夹,并在 res/values 文件夹中保留以前的 — 遗留 — 样式。
如果您的目标人群是 API < 21,并且您希望在较低的 API 级别中也拥有 material 风格的小吃店,您可以更改您的res/values/ 中的小吃店样式是这样的:
<!-- snackbar style in res/values/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@drawable/my_snackbar_background</item>
</style>
然后从 official repo 那里借用你的 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>
2022 年编辑:
如果您只想更改单个 snackbar,而不是整个应用程序,那么您可以使用如下的 ContextThemeWrapper;
ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.CustomSnackbarTheme);
customSnackBar = Snackbar.make(ctw, view, "", Snackbar.LENGTH_LONG);
并在您的样式文件中
<style name="CustomSnackbarTheme">
<item name="snackbarStyle">@style/MySnackBarStyle</item>
</style>
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@android:color/red</item>
</style>
这里是playground repo.
setBackgroundResource()
同样有效。
Snackbar snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG);
View sbView = snackbar.getView();
sbView.setBackgroundResource(R.color.background);
snackbar.show();
基本上,所提供的解决方案有一个缺点。 他们更改了小吃店的形状并删除了半径。
就个人而言,更喜欢这样的东西
val snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG);
val view = snackbar.getView();
val color = view.resources.getColor(colorId)
view.background.colorFilter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP)
使用Material Components Library just use the setBackgroundTint
方法。
Snackbar snackbar = Snackbar.make(view, "Snackbar custom style", Snackbar.LENGTH_LONG);
snackbar.setBackgroundTint(ContextCompat.getColor(this,R.color.secondaryColor));
snackbar.show();
使用 Jetpack Compose 您可以自定义 SnackbarHost
定义自定义 Snackbar
snackbarHost = {
// reuse default SnackbarHost to have default animation and timing handling
SnackbarHost(it) { data ->
Snackbar(
snackbarData = data,
backgroundColor = Color.Red
)
}
},
那就用吧:
scope.launch {scaffoldState.snackbarHostState.showSnackbar("Snackbar text")}
我不知道为什么在我的项目中找不到 setBackgroundColor()。这就是为什么我创建了一个扩展函数,现在没问题了。
fun View.showSnackBar(message: String) {
val snackBar = Snackbar.make(this, message, Snackbar.LENGTH_LONG)
snackBar.setBackgroundTint(ContextCompat.getColor(this.context, R.color.colorAccent))
snackBar.show()
}
并像下面这样称呼它
activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/login_holder_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
// your UI
</FrameLayout>
LoginActivity.kt
login_holder_layout.showSnackBar("Invalid Email")
you can use this code on the material design library
可以用
的方式创建颜色代码
打开 res/values/colors.xml 并添加这一行
<resources>
<color name="custom_color_name">CustomCode</color>
</resources>
创建 Snackbar 并更改背景
打开您的 activity 或片段并创建 Snackber
Snackbar snackbar= Snackbar.make(root,R.string.imageUploadTitle_error, BaseTransientBottomBar.LENGTH_LONG);
获取 Snackbar 视图
现在您应该在其中获取 SnackbarView 和更改自定义背景
View snackview = snackbar.getView();
更改背景颜色
使用此函数设置快餐栏背景颜色
snackview.setBackgroundColor(ContextCompat.getColor(getActivity() , R.color.error));
显示这个小吃店
现在应该显示 Snackbar
snackbar.show();
这样您就可以看到已更改为自定义颜色的背景
对于 Kotlin:
Snackbar.make(view,"simple text",Snackbar.LENGTH_SHORT).setBackgroundTint(Color.RED).show()