关于android:Activity启动时如何显示Snackbar?

How to show Snackbar when Activity starts?

我想在活动开始时显示android Snackbar (android.support.design.widget.Snackbar),就像我们显示Toast一样。

但是问题是我们在创建Snackbar时必须指定父布局,如下所示:

1
2
3
4
5
6
7
8
9
Snackbar.make(parentlayout,"This is main activity", Snackbar.LENGTH_LONG)
            .setAction("CLOSE", new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                }
            })
            .setActionTextColor(getResources().getColor(android.R.color.holo_red_light ))
            .show();

当我们在活动开始时显示Snackbar而没有任何点击事件时如何给出父级布局(如果是点击事件,我们可以轻松地传递父级视图)?


只需指向Activity's XML内的任何View。例如,您可以给根viewGroup指定一个ID,并使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);    
   setContentView(R.layout.main_activity);
   View parentLayout = findViewById(android.R.id.content);
   Snackbar.make(parentLayout,"This is main activity", Snackbar.LENGTH_LONG)
        .setAction("CLOSE", new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        })
        .setActionTextColor(getResources().getColor(android.R.color.holo_red_light ))
        .show();
   //Other stuff in OnCreate();
}


到目前为止,我一直无法展示Snackbar。
这是显示快餐栏的最简单方法。要将其显示为主要活动开始,只需将这两行放在OnCreate()

1
2
    Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),"Welcome To Main Activity", Snackbar.LENGTH_LONG);
    snackbar.show();

附:只需确保已导入Android设计支持即可(如问题中所述)。

对于科特林,

1
Snackbar.make(findViewById(android.R.id.content), message, Snackbar.LENGTH_SHORT).show()


Try this

1
2
3
4
Snackbar.make(findViewById(android.R.id.content),"Got the Result", Snackbar.LENGTH_LONG)
                        .setAction("Submit", mOnClickListener)
                        .setActionTextColor(Color.RED)
                        .show();

call this method in onCreate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Snackbar snack = Snackbar.make(
                    (((Activity) context).findViewById(android.R.id.content)),
                    message +"", Snackbar.LENGTH_SHORT);
snack.setDuration(Snackbar.LENGTH_INDEFINITE);//change Duration as you need
            //snack.setAction(actionButton, new View.OnClickListener());//add your own listener
            View view = snack.getView();
            TextView tv = (TextView) view
                    .findViewById(android.support.design.R.id.snackbar_text);
            tv.setTextColor(Color.WHITE);//change textColor

            TextView tvAction = (TextView) view
                    .findViewById(android.support.design.R.id.snackbar_action);
            tvAction.setTextSize(16);
            tvAction.setTextColor(Color.WHITE);

            snack.show();

只需在onCreate中使用以下代码即可完成此操作。通过使用android的默认布局

1
Snackbar.make(findViewById(android.R.id.content),"Your Message",Snackbar.LENGTH_LONG).show();


显示小吃店的工具功能

1
2
3
4
5
6
7
8
9
10
fun showSnackBar(activity: Activity, message: String, action: String? = null,
    actionListener: View.OnClickListener? = null, duration: Int = Snackbar.LENGTH_SHORT) {
    val snackBar = Snackbar.make(activity.findViewById(android.R.id.content), message, duration)
        .setBackgroundColor(Color.parseColor("#CC000000")) // todo update your color
        .setTextColor(Color.WHITE)
    if (action != null && actionListener!=null) {
        snackBar.setAction(action, actionListener)
    }
    snackBar.show()
}

在Activity中使用的示例

1
2
3
4
5
  showSnackBar(this,"No internet")
  showSnackBar(this,"No internet", duration = Snackbar.LENGTH_LONG)
  showSnackBar(activity,"No internet","OK", View.OnClickListener {
       // handle click
  })

在片段中使用的示例

1
  showSnackBar(getActivity(),"No internet")

希望对你有帮助


您可以尝试此库。这是android默认快餐栏的包装。 https://github.com/ChathuraHettiarachchi/CSnackBar

1
2
3
4
5
Snackbar.with(this,null)
    .type(Type.SUCCESS)
    .message("Profile updated successfully!")
    .duration(Duration.SHORT)
    .show();

它包含多种类型的小吃店,甚至是customview集成的小吃店