当Activity启动时如何显示Snackbar?
当Activity启动时如何显示Snackbar?
我想在活动开始时显示Android Snackbar
(android.support.design.widget.Snackbar)
,就像我们展示Toast
一样。\n但问题是,我们在创建Snackbar
时必须指定父布局,就像这样:\n
Snackbar.make(parentlayout, "这是主活动", Snackbar.LENGTH_LONG) .setAction("关闭", new View.OnClickListener() { @Override public void onClick(View view) { } }) .setActionTextColor(getResources().getColor(android.R.color.holo_red_light )) .show();
\n在活动开始时如何给予父布局,而不需要任何点击事件(如果是点击事件,我们可以很容易地传递父视图)?
问题的出现的原因:在Activity启动时,需要显示一个Snackbar。
解决方法:使用Snackbar的make()方法创建一个Snackbar对象,并设置显示的内容、显示时长等参数,然后调用show()方法显示Snackbar。
具体代码如下:
Snackbar.make(findViewById(android.R.id.content), "Got the Result", Snackbar.LENGTH_LONG) .setAction("Submit", mOnClickListener) .setActionTextColor(Color.RED) .show();
以上代码中,使用findViewById(android.R.id.content)获取当前Activity的根布局,然后调用Snackbar的make()方法创建一个Snackbar对象,传入根布局和要显示的内容。接着可以使用链式调用来设置Snackbar的其他属性,比如设置显示时长、设置操作按钮及其点击事件等。最后调用show()方法显示Snackbar即可。
注意:上述代码中的mOnClickListener是一个点击事件的监听器,需要根据实际情况进行定义和实现。
Snackbar是一种轻量级的用户提示工具,用于在屏幕底部显示短暂的信息。在使用Snackbar时,有用户提到遇到了一些问题,直到现在才能正确显示Snackbar。该问题的解决方法如下:
在活动启动时显示Snackbar的最简单方法是在OnCreate()
方法中添加以下两行代码:
Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Welcome To Main Activity", Snackbar.LENGTH_LONG); snackbar.show();
需要确保已经导入了Android Design Support库(如问题中提到的)。
对于Kotlin语言,可以使用以下代码显示Snackbar:
Snackbar.make(findViewById(android.R.id.content), message, Snackbar.LENGTH_SHORT).show()
当Activity启动时,如何显示Snackbar?
问题原因:
- 代码中使用了Snackbar来显示一个消息,但是找不到合适的View来显示Snackbar。
解决方法:
1. 在Activity的XML布局中为根ViewGroup设置一个id,例如:
2. 在代码中使用findViewById()方法找到根View,例如:
View parentLayout = findViewById(R.id.root_view);
3. 将parentLayout作为Snackbar的第一个参数传递,例如:
Snackbar.make(parentLayout, "This is main activity", Snackbar.LENGTH_LONG) .setAction("CLOSE", new View.OnClickListener() { public void onClick(View view) { } }) .setActionTextColor(getResources().getColor(android.R.color.holo_red_light)) .show();
4. 如果在Android 5.0或更低版本中抛出了NullPointerException,可能是布局中存在错误。可以尝试以下解决方法:
- 确保布局中的id与其他元素不重复。
- 如果使用了Fragment,应该使用rootView.findViewById(R.id.your_parent_view)来获取父View。
其他注意事项:
- 根View也可以使用findViewById(android.R.id.content)来获取。
- 如果没有使用CoordinatorLayout作为根View,可能会抛出NullPointerException。
- 不要忘记在build.gradle文件中添加依赖:'com.android.support:design:27.0.0'。
- getColor()方法在API 23中已被弃用,应该使用ContextCompat.getColor(context, R.color.color_name)方法代替。