当前位置: 首页 > article >正文

Snackbar

1.简介

位于底部的提示View
支持侧滑消失
同一时间只有一个
不支持跨Activity展示
国内使用率很低

2.基础使用

2.1 基本展示
Snackbar.make(view, "Content", Snackbar.LENGTH_LONG).show()
2.2 设置点击事件

注意不设置点击事件回调,点击按钮的文字不会展示出来

.setAction("click") {
            Log.d("TAG", "click")
        }
2.3 调整显示位置

会在设置的 View 上方展示

 .setAnchorView(R.id.flb_main)

如果不设置 AnchorView ,默认都是在底部展示的,那么有方法展示在中间么?

private static ViewGroup findSuitableParent(View view) {
    ViewGroup fallback = null;
    do {
      if (view instanceof CoordinatorLayout) {
        // We've found a CoordinatorLayout, use it
        return (ViewGroup) view;
      } else if (view instanceof FrameLayout) {
        if (view.getId() == android.R.id.content) {
          // If we've hit the decor content view, then we didn't find a CoL in the
          // hierarchy, so use it.
          return (ViewGroup) view;
        } else {
          // It's not the content view but we'll use it as our fallback
          fallback = (ViewGroup) view;
        }
      }

      if (view != null) {
        // Else, we will loop and crawl up the view hierarchy and try to find a parent
        final ViewParent parent = view.getParent();
        view = parent instanceof View ? (View) parent : null;
      }
    } while (view != null);

    // If we reach here then we didn't find a CoL or a suitable content view so we'll fallback
    return fallback;
  }

源码中会根据设置的view去找到最近的一个CoordinatorLayout,如果找不到就去找
FrameLayout 用来备用,直到找到顶层的 id 为 android.R.id.content 的 Fragment,
所以如果在布局中加入一个 CoordinatorLayout 完全可以让Snackbar展示在中间。

2.5 调整展示时间
  //下一个Snackbar出现,或者调用dismiss会消失
  public static final int LENGTH_INDEFINITE = -2;
  //短时间 1500 实际消失时间还会加上动画消失时间
  public static final int LENGTH_SHORT = -1;
  //长时间 2750 实际消失时间还会加上动画消失时间
  public static final int LENGTH_LONG = 0;
  
  //SnackbarManager
  private static final int SHORT_DURATION_MS = 1500;
  private static final int LONG_DURATION_MS = 2750;
2.6 调整颜色
//背景颜色
.setBackgroundTint()
//点击按钮颜色
.setActionTextColor()
//文字颜色
.setTextColor()
2.7 监听消失事件
.addCallback(object: BaseCallback<Snackbar>() {
                
            })
2.8 文字超过了会如何展示呢?

内容最多2行,超过会省略
按钮文字没有限制行数,短字数的情况下和内容在一行展示,多了会显示在内容下方。
如果想click展示完全可以扩大显示宽度

 .setMaxInlineActionWidth(100)

总结

使用还是比较少的,常见于 Android 项目的 Demo


http://www.kler.cn/a/945.html

相关文章:

  • LeetCode 热题 100_从前序与中序遍历序列构造二叉树(47_105_中等_C++)(二叉树;递归)
  • PySpark用sort-merge join解决数据倾斜的完整案例
  • JAVA:利用 RabbitMQ 死信队列实现支付超时场景的技术指南
  • 二级C语言 2025/1/14
  • Linux下部署Redis(本地部署超详细)
  • js:根据后端返回数据的最大值进行计算然后设置这个最大值为百分之百,其他的值除这个最大值
  • 【面试题】闭包是什么?this 到底指向谁?
  • 如何成为一名优秀的网络安全工程师?
  • 基于python的超市历年数据可视化分析
  • 【微信小程序】-- 页面事件 - 上拉触底 - 案例(二十七)
  • 适配器模式
  • 成都欢蓬电商:抖音集星是什么?有什么用?
  • 发光立方体效果 html+css
  • (16)C#传智:线程,Socket网络编程,模式窗体与非模式窗体(第16天)
  • 字符函数和字符串函数(上)-C语言详解
  • 排序算法之插入排序
  • 【算法经典题集】DP和枚举(持续更新~~~)
  • js正则:input 输入限制
  • 关于类型转换
  • CSS实现一个展示框
  • RabbitMQ Java开发教程(二)—官方原版
  • leetcode——27.移除元素
  • 【链表OJ题(六)】链表分割
  • 单调栈图文详解(附Java模板)
  • 【js逆向】hook大全
  • 线程池的使用:如何写出高效的多线程程序?