更改现有snackBar的文本

时间:2016-01-29 19:59:15

标签: android android-snackbar

我想在令牌失效时显示snackBar。小吃店将附加一个“刷新”令牌的动作。

SnackBar outerSnackBar;

outerSnackBar =  Snackbar.make(coordinatorLayout, 
"Your request is unauthorized. Please refresh your token", 
Snackbar.LENGTH_INDEFINITE).setAction("Refresh"), new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                outerSnackBar.setAction("", null);
                                outerSnackBar.setText("Refreshing");
                                outerSnackBar.show();
   }
}).show();

当我点击snackBar的“刷新”操作按钮时,我希望现有的snackBar文本更改为“Refreshing”并显示要执行的操作,因此这是我在onClickListener中编写的代码。

然而,当我点击“刷新”动作按钮时,小吃吧就会解散自己。

有没有修改现有小吃店的文字和动作?

5 个答案:

答案 0 :(得分:2)

最好显示带有“刷新”消息的新SnackBar

 SnackBar outerSnackBar =  Snackbar.make(coordinatorLayout, 
    "Your request is unauthorized. Please refresh your token", 
    Snackbar.LENGTH_INDEFINITE).setAction("Refresh"), new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    Snackbar refreshingSnackBar = Snackbar
                                           .make(coordinatorLayout, "Refreshing...",
                                            Snackbar.LENGTH_SHORT);
                                    refreshingSnackBar.show();
       }
    }).show(); 

答案 1 :(得分:2)

要仅更改文本,请获取小吃栏的textview:

TextView tvSnackbarText =  snackbar.getView().findViewById(android.support.design.R.id.snackbar_text); 
tvSnackbarText.setText("Any text");

您提到了“ ...以及要显示的操作”,因此这些不必要:

outerSnackBar.setAction("", null);
outerSnackBar.show();

此处提到了其他有用的方法How to set support library snackbar text color to something other than android:textColor?

答案 2 :(得分:1)

只需使用Snackbar.setText

无需手动搜索内部文本视图,这非常hacky。

snackbar.setText("New Snackbar Message")

似乎并没有像您提到的那样关闭SnackBar

答案 3 :(得分:1)

这是更改文本和颜色的示例解决方案。

Snackbar snack = Snakebar.make(parent, "first text", Snackbar.LENGTH_INDEFINITE);

//change text when snackbar is showing

snack.setText("new different text")

//change color when snackbar is showing

snack.getView().setBackgroundColor(ContextCompat.getColor(context, R.color.green);

注意,'green' 颜色必须在 colors.xml 文件中定义 例如:

<color name="green">#4CAF50</color>

答案 4 :(得分:0)

我曾经使用以下代码获取视图并设置文本:

TextView snackBarText =  snackbar.getView().findViewById(android.support.design.R.id.snackbar_text); 
snackBarText.setText("Stackoverflow is cool!");

但现在使用AndroidX,这是获取视图的正确方法:

TextView snackBarText =  snackbar.getView().findViewById(com.google.android.material.R.id.snackbar_text);