【问题标题】:Changing the text of an existing snackBar更改现有snackBar 的文本
【发布时间】:2016-05-07 16:33:09
【问题描述】:

我想在我的令牌失效时显示一个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 的文本更改为“刷新”并显示操作,因此这是我在onClickListener 中编写的代码。

但是,当我单击“刷新”操作按钮时,小吃栏会自行消失。

是否可以修改现有小吃店的文本和操作?

【问题讨论】:

    标签: android android-snackbar


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      要只改变文本,获取snackbar的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?

      【讨论】:

        【解决方案3】:

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

        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 已经有 setText 方法但没有 getter,您可以使用您提到的这种方式获取当前文本并在其上附加。
        【解决方案4】:

        只需使用Snackbar.setText

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

        snackbar.setText("New Snackbar Message")
        

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

        【讨论】:

          【解决方案5】:

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

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

          注意,“绿色”颜色必须在 colors.xml 文件中定义 例如:

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

          【讨论】:

          • 是的。需要注意的重要一点是小吃店必须显示。如果它被解雇并且您设置了文本,然后显示它,它将不会显示文本
          猜你喜欢
          • 2016-02-04
          • 2019-02-15
          • 2018-02-03
          • 1970-01-01
          • 2019-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多