如何在Activity启动时显示Snackbar?

Sud*_*han 81 android material-design android-snackbar

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

但问题是我们必须在创建时指定父布局Snackbar:

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();
Run Code Online (Sandbox Code Playgroud)

如何Snackbar在没有任何点击事件的情况下在活动开始时显示父布局(如果是点击事件我们可以轻松传递父视图)?

Dav*_*ini 180

只需指向XML View内部的任何内容即可Activity's.例如,您可以为根视图组赋予一个id,并使用:

@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();
}
Run Code Online (Sandbox Code Playgroud)

  • 对于根视图,您通常也可以使用`findViewById(android.R.id.content)`,如此处所示http://stackoverflow.com/a/4488149/1518546 (54认同)

dev*_*jay 20

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

    Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Welcome To Main Activity", Snackbar.LENGTH_LONG);
    snackbar.show();
Run Code Online (Sandbox Code Playgroud)

PS只需确保您已导入Android设计支持.(如问题中所述).


Pha*_*inh 6

一个显示小吃店的utils函数

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()
}
Run Code Online (Sandbox Code Playgroud)

在活动中使用的示例

  showSnackBar(this, "No internet")
  showSnackBar(this, "No internet", duration = Snackbar.LENGTH_LONG)
  showSnackBar(activity, "No internet", "OK", View.OnClickListener { 
       // handle click 
  })
Run Code Online (Sandbox Code Playgroud)

在片段中使用的示例

  showSnackBar(getActivity(), "No internet")
Run Code Online (Sandbox Code Playgroud)

希望有帮助


小智 5

尝试这个

Snackbar.make(findViewById(android.R.id.content), "Got the Result", Snackbar.LENGTH_LONG)
                        .setAction("Submit", mOnClickListener)
                        .setActionTextColor(Color.RED)
                        .show();
Run Code Online (Sandbox Code Playgroud)