123

我想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();

当我们在没有任何点击事件的活动开始时显示时如何提供父布局Snackbar(如果它是一个点击事件,我们可以轻松地传递父视图)?

4

9 回答 9

250

只需指向XML中的任何View内容。Activity's例如,您可以为根 viewGroup 提供一个 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();
}
于 2015-06-22T11:16:34.867 回答
47

到目前为止,我自己在展示 Snackbar 时遇到了麻烦。这是显示 Snackbar 的最简单方法。要将其显示为您的主要活动开始,只需将这两行放在您的OnCreate()

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

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

对于 Kotlin,

Snackbar.make(findViewById(android.R.id.content), message, Snackbar.LENGTH_SHORT).show()
于 2017-08-06T13:37:10.377 回答
11

尝试这个

Snackbar.make(findViewById(android.R.id.content), "Got the Result", Snackbar.LENGTH_LONG)
                        .setAction("Submit", mOnClickListener)
                        .setActionTextColor(Color.RED)
                        .show();
于 2017-09-24T07:55:23.480 回答
4

在 onCreate 中调用此方法

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();
于 2016-12-28T14:05:40.100 回答
4

显示小吃店的实用程序功能

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 中使用的示例

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

在 Fragment 中使用的示例

  showSnackBar(getActivity(), "No internet")

希望有帮助

于 2018-10-23T07:28:58.197 回答
3

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

Snackbar.make(findViewById(android.R.id.content),"Your Message",Snackbar.LENGTH_LONG).show();
于 2018-12-28T12:31:18.370 回答
1

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

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

这包含多种类型的小吃店,甚至还有一个 customview 集成的小吃店

于 2017-02-03T07:29:24.157 回答
0

显示一些文本的简单方法:

Snackbar.make(view, "Sample Text", Snackbar.LENGTH_SHORT).show();

并用按钮显示文本:

Snackbar.make(view, "Sample Text", Snackbar.LENGTH_SHORT).setAction("Ok", new View.OnClickListener() {
            @Override 
            public void onClick(View view) {

            } 
        }).show();
于 2020-12-04T05:58:30.833 回答
0

您还可以为所有活动定义一个超类,并在父活动中找到一次视图。

例如

AppActivity.java:

public class AppActivity extends AppCompatActivity {

    protected View content;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        changeLanguage("fa");
        content = findViewById(android.R.id.content);
    }
}

并且你的零食在你的应用中的每一个活动中都是这样的:

Snackbar.make(content, "hello every body", Snackbar.LENGTH_SHORT).show();

您必须为每个活动找到一次视图,这对性能更好。

于 2020-08-22T18:44:13.077 回答