Snackbar的使用和顶部Snackbar实现

article/2025/9/18 18:58:31

下载链接:Snackbar顶部显示

也可以module的形式直接导入使用 :module导入教程

谷歌在android 5.0 发布后,随后公布了design库和设计理念(需翻墙),意图在于规范安卓app的风格,类似而不仅仅ios的扁平风。我认为每个android的开发和设计人员都应该看一看这个,站在巨人的肩膀上摘甜品何乐而不为。

之前写的是基于design支持包25版本的API,没想到的是snackbar在升级后的源码发生了改变,这版是基于android 8.0sdkdesign 26.1.0gradle 4.1android studio 3.0.1所编写。
  下面进入正题。首先我们需要集成design库:
    implementation 'com.android.support:design:26.1.0'

库中分别有FloatingActionButton(悬浮操作按钮)、CollapsingToolbarLayout(可伸缩折叠的ToolBar)、TabLayout(选项卡)、Snackbar等组件。今天只说Snackbar,官方文档在此,英文好的少年建议先看官方文档。先放一张烂大街的图

Snackbar

Snackbar的出现旨在替换Toast。它比Toast的拓展性更高,源码相对比较简单。使用方法也和Toast极其类似。可以透过源码看到它的显示主体叫做SnackbarLayout,一个内部类,继承于LinearLayout。所以Snackbar就是一个LinearLayout。其public方法主要有以下几个:


make(View view, CharSequence text, int duration)

这个静态方法是使用Snackbar的入口,因为Snackbar的构造是私有的。第一个参数是一个View。这个view可以传子view,传进去会判断并拿到根ViewGroup,Snackbar即添加到此ViewGroup。判断方法如下
<pre><code>
private static ViewGroup findSuitableParent(View view) {

    ViewGroup fallback = null;do {if (view instanceof CoordinatorLayout) {return (ViewGroup) view;} else if (view instanceof FrameLayout) {if (view.getId() == android.R.id.content) {return (ViewGroup) view;} else {fallback = (ViewGroup) view;}}if (view != null) {final ViewParent parent = view.getParent();view = parent instanceof View ? (View) parent : null;}} while (view != null);return fallback;

}
</pre></code>
  第二个参数是Snackbar显示的文字内容,可以穿字符串,也可以传string resID,不再累述。
  第三个参数是显示时长,三个值供选择:

名称意义
LENGTH_INDEFINITE始终显示,点击Snackbar上的按钮才会消失
LENGTH_SHORT显示1500毫秒
LENGTH_LONG显示2750毫秒

setText(CharSequence message)

修改文字,可穿字符串和string resID。

setAction(CharSequence text, final View.OnClickListener listener)

第一个参数设置点击部分的文字。第二个参数则是给Snackbar设置点击事件,不需要再在onClick里去写dismiss,点击事件执行完会自动dismiss。

setActionTextColor(ColorStateList colors)

设置按钮文字颜色,可传色值和color resID。

setCallback(Callback callback)

给Snackbar添加一个显示和隐藏的监听,分别对应Callback接口里的onShown和onDismissed方法。

show()和dismiss()

显示和隐藏。


说了这么多,其实就是3行代码:
Snackbar.make(parentLayout, R.string.snackbar_text,Snackbar.LENGTH_LONG) .setAction(R.string.snackbar_action, myOnClickListener) .show();

以上就是Snackbar的使用方法。感觉好像少了点什么?没错,Snackbar只能在底部显示!可是我想把提示做在顶部,没办法只好把Snackbar的源码拷贝出来,自己动手改!不先看效果的文章不是好作者,上一张效果图:

demo.gif


  我们需要从源码中拷贝6个类:AnimationUtils.java、BaseTransientBottomBar.java、Snackbar.java、SnackbarManager.java、SnackbarContentLayout.java、ThemeUtils.java,两个布局文件:design_layout_snackbar.xml、design_layout_snackbar_include.xml。建议把Snackbar.java、design_layout_snackbar.xml和design_layout_snackbar_include.xml的名字改了。下面开始修改源码:
  首先,我们打开BaseTransientBottomBar.java,里面的animateViewIn()animateViewOut()就是定义Snackbar弹出动画和弹入动画的方法。在in方法里,可以看到定义动画初始Y坐标是给了一个mView.getHeight()的值,我们给改成负的,即-mView.getHeight()。移步out方法,可以看到定义了一个动画结束的Y坐标是mView.getHeight(),再改成负的-mView.getHeight(),但是这还不够,还需要在方法伊始加上ViewCompat.setTranslationY(mView, 0);这句,定义动画初始Y轴坐标为0。
  最后再把design_layout_snackbar.xml里的layout_gravitybottom改为top,class改为自己拷出来的SnackBarLayout;把design_layout_snackbar_include.xml中的class改为自己拷出来的SnackbarContentLayout。至此,你的Snackbar就变成在顶部的了。如需顶部底部都支持请自己封装...因为我太困了。
 


http://chatgpt.dhexx.cn/article/X8ycJ0TQ.shtml

相关文章

SnackBar 简单使用

1.简介 Snackbar是Android Support Design Library库中的一个控件&#xff0c;可以在屏幕底部快速弹出消息&#xff0c;比Toast更加好用.可以添加点击行为。多用于结合协调布局使用&#xff08;CoordinatorLayout&#xff09;。 implementation com.android.support:design:28…

MaterialDesign之Snackbar学习笔记

近期实在太忙了&#xff0c;看到好的文章先转载&#xff0c;后续自己慢慢消化吧&#xff01; 转载 http://www.jianshu.com/p/cd1e80e64311#rd 没时间解释了&#xff0c;快使用Snackbar!——Android Snackbar花式使用指南 字数2405 阅读1628 评论4 喜欢54 本文是在《Design…

Snackbar使用详解

Snackbar Snackbar是Android Support Design Library库中的一个控件&#xff0c;可以在屏幕底部快速弹出消息&#xff0c;比Toast更加好用。 开发出一个好的产品&#xff0c;友好的交互是不可缺少的&#xff0c;通常给用户提示信息的方式有三种&#xff1a;Dialog、Toast、Sn…

Snackbar使用详解及其相关框架TSnackbar

简述&#xff1a; Snackbar 是 Android design support library 中的一个组件&#xff0c;它的作用和Toast类似&#xff0c;显示吐司&#xff0c;但Snackbar的特别之处在于Snackbar显示的提示信息可以和用户交互&#xff0c;更好地获取用户反馈信息。同时&#xff0c;它显示的吐…

HAWQ:基于 Hessian 的混合精度神经网络量化

HAWQ&#xff1a;基于 Hessian 的混合精度神经网络量化 摘要动机方法海森方法的有效性分析海森矩阵方法推导根据幂迭代求海森矩阵的最大特征值根据海森矩阵最大特征值确定量化精度与顺序 实验结果ResNet20 On CIFAR-10ResNet50 on ImageNetSqueezeNext on ImageNetInception-V3…

HAWQ技术解析(二) —— 安装部署

一、安装规划1. 选择安装介质 HAWQ的安装介质有两种选择&#xff0c;一是下载源码手工编译&#xff0c;二是使用Pivotal公司提供的HDB安装包。源码的下载地址为 http://apache.org/dyn/closer.cgi/incubator/hawq/2.0.0.0-incubating/apache-hawq-src-2.0.0.0-incubating.tar.…

HAWQ取代传统数仓实践(二)——搭建示例模型(MySQL、HAWQ)

一、业务场景 本系列实验将应用HAWQ数据库&#xff0c;为一个销售订单系统建立数据仓库。本篇说明示例的业务场景、数据仓库架构、实验环境、源和目标库的建立过程、测试数据和日期维度的生成。后面陆续进行初始数据装载、定期数据装载、调度ETL工作流自动执行、维度表技术、事…

HAWQ从0.5开始安装说明.包含hadoop和hawq

文档是从自己的云笔记中复制,格式什么的可能有问题.已修复了一遍. 零.前提 一.安装hadoop 1.1下载并复制hadoop2.6.5 1.2编辑系统配置文件 1.3创建hadoop的tmp临时目录 1.4开始修改配置文件 1.5复制hadoop到其他所有节点上 1.6开始初始化hadoop 1.7 如果服务器重启了,…

开源数据库HAWQ,架构调研

hawq的简介 https://cloud.tencent.com/developer/article/1433137 HAWQ&#xff0c;全称Hadoop With Query&#xff08;带查询Hadoop&#xff09;。HAWQ使企业能够获益于经过锤炼的基于MPP的分析功能及其查询性能&#xff0c;同时利用Hadoop堆栈。HAWQ是一个Hadoop原生大规模…

apache hawq

为什么80%的码农都做不了架构师&#xff1f;>>> 资料地址&#xff1a; 导航页 What is HAWQ? HAWQ Architecture How HAWQ Manages Resources Understanding the Fault Tolerance Service Table Distribution and Storage Choosing the Table Distribution Pol…

HAWQ技术解析(一) —— HAWQ简介

一、SQL on Hadoop 过去五年里&#xff0c;许多企业已慢慢开始接受Hadoop生态系统&#xff0c;将它用作其大数据分析堆栈的核心组件。尽管Hadoop生态系统的MapReduce组件是一个强大的典范&#xff0c;但随着时间的推移&#xff0c;MapReduce自身并不是连接存储在Hadoop生态系统…

《HAWQ-V3: Dyadic Neural Network Quantization》论文阅读

HAWQ-V3阅读笔记 Abstract 混合精度量化&#xff0c;integer-only&#xff0c; Methodology 只采用均匀量化 权重对称量化&#xff0c;激活非对称量化&#xff0c;对量化步长S采用静态量化&#xff0c;采用per-channel的量化方式 3.1量化矩阵的乘法与卷积&#xff08;核心…

HAWQ手动安装

HAWQ手动安装及使用手册 1 HAWQ简介 HAWQ 是 Pivotal 设计的一个大规模并行 SQL 分析处理引擎&#xff0c;支持事务处理。HAWQ 将复杂的查询分割成简单的任何&#xff0c;并分发到并行处理系统中的处理单元执行。包括查询规划器、动态管道、前沿互联和查询执行优化器等等。提…

HAWQ上安装PXF插件,并访问HDFS文件数据

1、说明 HAWQ在github上的地址为&#xff1a;https://github.com/apache/hawq 在安装pxf插件之前&#xff0c;可以先查看一下基础软件对应的版本信息&#xff1a;在hawq目录下的pxf/gradle.properties文件中 因我在安装pxf之前&#xff0c;已经把hadoop及hawq安装完&#xff…

HAWQ技术解析(五) —— 连接管理

服务器启动后&#xff0c;还要经过一系列配置&#xff0c;才能被客户端程序所连接。本篇说明如何配置客户端身份认证&#xff0c;HAWQ的权限管理机制&#xff0c;HAWQ最常用的命令行客户端工具psql及与mysql命令行常用命令类比&#xff0c;最后还将列举一些客户端连接HAWQ数据库…

HAWQ-V3: Dyadic Neural Network Quantization论文学习

论文链接 https://arxiv.org/abs/2011.10680 摘要 目前的低精度量化算法往往具有从浮点值到量化整数值的来回转换的隐藏代价。这种隐藏的成本限制了通过量化神经网络所实现的延迟改进。为了解决这个问题&#xff0c;我们提出了HAWQ-V3&#xff0c;一个新的混合精度纯整数量化框…

HAWQ取代传统数仓实践(一)——为什么选择HAWQ

一、HAWQ取代传统数仓实践&#xff08;一&#xff09;——为什么选择HAWQ 为了跟上所谓“大数据”技术的脚步&#xff0c;从两年前开始着手实践各种SQL-on-Hadoop技术&#xff0c;从最初的Hive&#xff0c;到SparkSQL&#xff0c;再到Impala&#xff0c;进行了一系列ETL、CDC、…

在centos 7.3上进行Apache HAWQ集群安装部署

一、前期准备工作 1、准备三台物理机&#xff0c;master&#xff08;192.168.251.8&#xff09;,dataserver1&#xff08;192.168.251.9&#xff09;,dataserver2&#xff08;192.168.251.10&#xff09;&#xff1b; 2、目前最新版本是2.4.0&#xff0c; 官网下载地址&…

HAWQ

为了跟上所谓“大数据”技术的脚步&#xff0c;从两年前开始着手实践各种SQL-on-Hadoop技术&#xff0c;从最初的Hive&#xff0c;到SparkSQL&#xff0c;再到Impala&#xff0c;进行了一系列ETL、CDC、多维数据仓库、OLAP的实验。作为一名从业20年以上的DBA&#xff0c;从数据…

HAWQ技术解析(三) —— 基本架构

HAWQ是一个Hadoop原生的SQL查询引擎&#xff0c;它结合了MPP数据库的关键技术和Hadoop的可扩展性。HAWQ在原生的HDFS上读写数据&#xff0c;MPP架构使HAWQ表现出超越其它SQL on Hadoop解决方案的查询性能&#xff0c;Hadoop又为HAWQ提供了传统数据库所不具备的线性扩展能力。 一…