我想在令牌失效时显示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中编写的代码。
然而,当我点击“刷新”动作按钮时,小吃吧就会解散自己。
有没有修改现有小吃店的文字和动作?
答案 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);