繁体   English   中英

更改现有小吃店的文本

[英]Changing the text of an existing 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();

当我单击小吃店的“刷新”操作按钮时,我希望现有小吃店的文本更改为“刷新”并显示该操作,因此这是我在 onClickListener 中编写的代码。

但是,当我单击“刷新”操作按钮时,小吃店会自行关闭。

无论如何要修改现有小吃店的文本和操作?

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

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

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

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

这里提到了其他有用的方法如何将支持库小吃栏文本颜色设置为 android:textColor 以外的其他颜色?

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

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

最好显示带有“刷新”消息的新 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(); 

只需使用Snackbar.setText

不需要手动搜索内部文本视图,超级hacky。

snackbar.setText("New Snackbar Message")

它似乎并没有像你提到的那样忽略 SnackBar

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

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM