扩展Snackbar 使其支持居中显示
https://github.com/nispok/snackbar
默认Snackbar支持底部或者顶部显示,不支持居中显示
查看Snackbar.java的源码可以看到createMarginLayoutParams方法中有位置的处理SnackbarPosition ,
针对不同的显示位置设置对应的params规则,这里我们将表示位置的枚举SnackbarPosition中添加一种类型PARENT_CENTER
public static enum SnackbarPosition {
TOP(Gravity.TOP), BOTTOM(Gravity.BOTTOM), BOTTOM_CENTER(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL)
, PARENT_CENTER(Gravity.CENTER_VERTICAL);
}
createMarginLayoutParams方法中部分逻辑修改如下:
else if (viewGroup instanceof RelativeLayout) {
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height);
if (position == SnackbarPosition.TOP)
params.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
else if(position == SnackbarPosition.BOTTOM)
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
else if(position == SnackbarPosition.PARENT_CENTER)
params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
return params;
}
如果viewgGroup的类型不是RelativeLayout,也可以不修改createMarginLayoutParams方法中的逻辑。
因为,提示条在中间显示默认位移的动画效果有些突兀,这里我们修改下居中显示时的动画效果,修改为透明度动画。
修改两个获取动画资源函数:
/**
* @param snackbarPosition
* @return the animation resource used by this {@link com.nispok.snackbar.Snackbar} instance
* to enter the view
*/
@AnimRes
public static int getInAnimationResource(SnackbarPosition snackbarPosition) {
return snackbarPosition == SnackbarPosition.TOP ? R.anim.sb__top_in :
(snackbarPosition == SnackbarPosition.PARENT_CENTER ? R.anim.sb__center_in : R.anim.sb__bottom_in);
} /**
* @param snackbarPosition
* @return the animation resource used by this {@link com.nispok.snackbar.Snackbar} instance
* to exit the view
*/
@AnimRes
public static int getOutAnimationResource(SnackbarPosition snackbarPosition) {
return snackbarPosition == SnackbarPosition.TOP ? R.anim.sb__top_out :
(snackbarPosition == SnackbarPosition.PARENT_CENTER ? R.anim.sb__center_out : R.anim.sb__bottom_out);
}
anim文件夹下增加sb__center_in sb__center_out两个配置文件如下:
sb__center_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromAlpha="0"
android:interpolator="@interpolator/sb__decelerate_cubic"
android:toAlpha="1" />
</set>
sb__center_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromAlpha="1"
android:interpolator="@interpolator/sb__decelerate_cubic"
android:toAlpha="0" />
</set>
在sample的示例代码SnackSampleActivity中单行显示文本的Snackbar的代码修改如下:
singleLineButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SnackbarManager.show(
Snackbar.with(SnackbarSampleActivity.this)
.position(Snackbar.SnackbarPosition.PARENT_CENTER)
.margin(25)
.text("Center Single-line snackbar"));
}
});
最终显示效果如下:

扩展Snackbar 使其支持居中显示的更多相关文章
- 使提示框居中显示&自定义提示框
ToastActivity.java文件: 1 public class ToastActivity extends AppCompatActivity { 2 private Button mbtn ...
- Windows Phone中扩展WebBrowser使其支持绑定html内容
在WP开发中,有时候会用到WebBrowser控件来展示一些html内容,这个控件有很多局限性,比如不支持绑定内容,这样的MVVM模式中就无法进行内容的绑定.为了实现这个目的,需要扩展一下,具体代码如 ...
- 在PHP中开启CURL扩展,使其支持curl()函数
在用PHP开发CMS的时候,要用到PHP的curl函数,默认状态下,这个函数需要开启CURL扩展,有主机使用权的,可通过PHP.ini文件开启本扩展,方法如下: 1.打开php.ini,定位到;ext ...
- css使Img图片居中显示
<div class="flex-center listing-img"> <img v-if="item.imgUrl" v-bind:sr ...
- 让几个横向排列的浮动子div居中显示的方法
div设置成float之后,就无法使子div居中显示了,那么如何让几个横向排列的浮动的div居中显示呢,下面有个不错的方法,希望对大家有所帮助 div设置成float之后,在父div中设置text-a ...
- jQery使网页在显示器上居中显示适用于任何分辨率
这篇文章主要介绍了jQery使网页在任何分辨率的显示器上居中显示的方法,需要的朋友可以参考下 检测屏幕宽度,并设置为id为frame的div宽度, 根据自己网页的最大宽度来调节,小demo最大宽度为1 ...
- yum 安装apache php 使php支持memcached扩展
在公司上新项目的时候,无论生产环境还是测试环境,都会让运维安装php 环境(lamp/lnmp),并让php支持memcached 的扩展.这里搭建php环境其实主要就是搭建apache 和php.m ...
- C#怎样保证弹出窗体是唯一并居中显示
Winform窗体中,假如我从Form1窗体要弹出Form2窗体,写法是这样的: Form2 f2 = new Form2(); f2.Show(); 1.如何使窗体打开时居中显示 //初始化默认窗体 ...
- 25款响应式,支持视网膜显示的 Wordpress 主题
响应式和现代设计风格的多用途 WordPress 主题与能够非常灵活的适应所有设备.而高级主题能够更大可能性的轻松定制.所有的主题是完全响应式的,您可以从主题选项中禁用/启用响应模式. 多用途的响应式 ...
随机推荐
- ETL全量单表同步简述
ETL全量单表同步简述 1. 实现需求 当原数据库的表有新增.更新.删除操作时,将改动数据同步到目标库对应的数据表. 2. 设计思路 设计总体流程图如下: 注意点: 1.数据库合并时,选择正确的数据源 ...
- zabbix学习系列之配置邮件告警
整体思路是:添加监控项-->配置触发器(达到设定的阈值就触发)-->配置动作(将某个触发器绑定到某个动作,达到某个阈值,触发器触发的时候,通过邮件发送告警信息给某个用户) 配置触发器 创建 ...
- 网络学习之OSI七层协议和TCP协议
OSI七层简单介绍 应用层:提供操作系统和应用程序的接口 表示层:表示数据如何加密.如何压缩的 会话层:将不同应用程序数据分离 传输层:提供可靠和不可靠的数据传输和重传.纠错的功能 网络层:提供IP地 ...
- 015 WAN
Router#config t Enter configuration commands, one per line. End with CNTL/Z. Router(config)#int s0/ ...
- Android和MVC
Activity和Android的mvc模式 http://blog.csdn.net/dengshengjin2234/article/details/8502097 //android涉及到的 ...
- [TypeScript] Represent Non-Primitive Types with TypeScript’s object Type
ypeScript 2.2 introduced the object, a type that represents any non-primitive type. It can be used t ...
- 操作系统——IO管理
一.IO系统结构 在计算机系统中.cpu要和很多外设进行交互.比方鼠标,键盘,网卡等等. 1.IO是怎样协调工作的那? (1)对于设备来说,其有两部分组成,一部分是机械部分,还有一部分是电子控制部分. ...
- HDU2577 How to Type【DP】
题目链接: pid=2577">http://acm.hdu.edu.cn/showproblem.php? pid=2577 题目大意: 给你一个仅仅包括大写和小写字母的字符串,如今 ...
- Django打造大型企业官网(七)
4.13.新闻列表tab栏布局完成 templates/news/index.html <div class="list-outer-group"> <ul cl ...
- 开放-封闭"原则(OCP)
Open-Closed Principle原则讲的是:一个软件实体应当对扩展开放,对修改关闭. 优点: 通过扩展已有软件系统,可以提供新的行为,以满足对软件的新的需求,使变化中的软件有一定的适应性和灵 ...