关于Snackbar的认识 用于代替toast
Snackbar.make(view, "This is a message! ", Snackbar.LENGTH_LONG).show();
参数1,view是谁都行 主要是activity布局上的一个view即可,
Snackbar.
make(view,
"This is a message! ", Snackbar.
LENGTH_LONG)
.setAction("Action", new View.OnClickListener() { //给ACTION注册点击事件
@Override
public void onClick(View v) {
Toast. makeText(MainActivity. this, "111",Toast. LENGTH_SHORT).show();
}
}).setActionTextColor(Color. RED)
public void onClick(View v) {
Toast. makeText(MainActivity. this, "111",Toast. LENGTH_SHORT).show();
}
}).setActionTextColor(Color. RED)
.show();
snackbar设置背景颜色
Snackbar bar=
Snackbar.
make(
rl_activity,
"it is Snackbar",
Snackbar.
LENGTH_SHORT);
View v=bar.getView();
v.setBackgroundColor(Color. GREEN);
bar.show();
View v=bar.getView();
v.setBackgroundColor(Color. GREEN);
bar.show();
方式二:
思路:既然有虚拟按键栏遮挡Snackbar,那么我们就在显示Snackbar的同时隐藏掉虚拟按键栏,这样屏幕底部就只有Snackbar,也就不存在遮挡问题了,但是有两点需要注意,第一点,配置隐藏虚拟按键栏的flag时要注意配置全面一点,不然会出现点击屏幕又弹出虚拟按键栏的情况,第二点,当Snackbar消失时,记得再次把虚拟按键栏显示出来,不然屏幕底部会多出一块布局,很难看.不过以上这两点都不用操心了,我已经在代码中配置好了,直接复制粘贴就能用,代码需要注意的地方都已经注释清楚了.代码如下:
- /**
- * 展示一个SnackBar
- */
- public void showSnackBar(String message) {
- //去掉虚拟按键
- getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION //隐藏虚拟按键栏
- | View.SYSTEM_UI_FLAG_IMMERSIVE //防止点击屏幕时,隐藏虚拟按键栏又弹了出来
- );
- final Snackbar snackbar = Snackbar.make(getWindow().getDecorView(), message, Snackbar.LENGTH_INDEFINITE);
- snackbar.setAction("知道了", new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- snackbar.dismiss();
- //隐藏SnackBar时记得恢复隐藏虚拟按键栏,不然屏幕底部会多出一块空白布局出来,和难看
- getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
- }
- }).show();
- }
这两种方法都可以实现效果,选择哪种方式都ok.
动态图录制完有点卡顿,实际效果很流畅
https://github.com/AndreiD/TSnackBar从顶部显示的snackbar