扩展Snackbar 使其支持居中显示

默认Snackbar支持底部或者顶部显示,不支持居中显示

查看Snackbar的源码可以看到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的类型不是ReletiveLayout,也可以不修改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"));
            }
        });

最终显示效果如下:

时间: 2024-10-06 14:49:44

扩展Snackbar 使其支持居中显示的相关文章

Windows Phone中扩展WebBrowser使其支持绑定html内容

在WP开发中,有时候会用到WebBrowser控件来展示一些html内容,这个控件有很多局限性,比如不支持绑定内容,这样的MVVM模式中就无法进行内容的绑定.为了实现这个目的,需要扩展一下,具体代码如下: /// <summary> /// 用于绑定WebBrowser控件的html内容 用法:ext:WebBrowserProperties.Body="{Binding CurrentArticleItem.Html}" /// </summary> publ

在PHP中开启CURL扩展,使其支持curl()函数

在用PHP开发CMS的时候,要用到PHP的curl函数,默认状态下,这个函数需要开启CURL扩展,有主机使用权的,可通过PHP.ini文件开启本扩展,方法如下: 1.打开php.ini,定位到;extension=php_curl.dll,将其前面的;去掉. 2.将PHP目录下ext目录中的:php_curl.dll.libeay32.dll和ssleay32.dll三个文件复制到系统system32目录下,重启IIS或apache. 3.为了确保是否已开启CURL扩展,可通过下述代码进行测试:

《转》QT界面怎么使控件随窗口大小变化一直居中显示

使用QT开发界面时常遇到一些控件位置变动的问题,使用布局可以解决很多问题,比如设置居中显示. 工具/原料 QT开发工具 方法/步骤 首先我们在界面中添加一个QLabel控件. 在控件上边下边分别添加一个竖直的弹簧,选中这三个控件,然后点击竖直布局,如下图所示.布局结果如右图. 然后在上次布局的两侧添加水平的弹簧,选中两个弹簧和上次的布局,点击水平布局.布局效果如图 最后选中最外层的窗口,然后点击水平或竖直布局,进行整体布局 布局效果如下图,现在可以运行一下,然后拖动界面改变大小来试一下效果了.

yum 安装apache php 使php支持memcached扩展

在公司上新项目的时候,无论生产环境还是测试环境,都会让运维安装php 环境(lamp/lnmp),并让php支持memcached 的扩展.这里搭建php环境其实主要就是搭建apache 和php.mysql一般都是用单独的数据库,不会再同一台服务器上的.看似简单的东西,在搭建的时候,还真是遇到了不少问题,以此记录,方便各位运维同学. 一.163和默认的镜像源有些包不能下载,使用阿里的镜像源 见本博客地址:http://www.cnblogs.com/lzcys8868/p/7532569.ht

怎样使一个div标签随着浏览器窗口的改变一直居中显示

在我们开发页面的过程中,经常会遇到让div居中在浏览器中显示,或使div标签在父级div中居中显示,下面就是解决方法1.在浏览器中居中显示 <style> .main{width:200px;height:200px;margin: auto; position: absolute; top: 0; left: 0; bottom: 0; right: 0;} </style> <div class="main"></div> 2.在父级

如何配置IIS使其支持APK文件的下载

如何配置IIS使其支持APK文件的下载APK文件是安卓的安装程序的文件,IIS里的MIME里默认是不支持的.如果没有配置MIME时,直接输入网址要下载APK文件时,会提示找不到此文件.这里教你如何配置IIS的MIME设置,使其可以支持APK文件的下载.1.在管理工具里打开Internet 信息服务(IIS)管理器.然后选择需要配置的网站.2.右侧的界面中会显示该网站的所有功能配置,我们选择并点击进入“MIME类型”3.在右侧的操作区选择点击“添加”MIME.4.在弹出的添加窗口里的文件扩展名输入

使定位元素居中的4种方法例举

例子: 创建两个div,定位父级'box'  和   定位元素'sun'.本文要做的是 'sun' 要在 'box' 中居中显示, 该怎么做呢? 定位前效果图: 定位元素居中后的效果图: HTML代码: <!--定位元素父级--> <div id="box"> <!--定位元素--> <div id="sun"></div> </div> 样式代码: <style type="t

让TextView的drawableLeft与文本一起居中显示

 TextView的drawableLeft.drawableRight和drawableTop是一个常用.好用的属性,可以在文本的上下左右放置一个图片,而不使用更加复杂布局就能达到,我也常常喜欢用RadioButton的这几个属性实现很多效果,但是苦于不支持让drawbleLeft与文本一起居中,设置gravity为center也无济于事,终于有空研究了一下,这里与大家一起分享. 声明 欢迎转载,请注明出处! 博客园:http://www.cnblogs.com/ 农民伯伯: http://w

MFC 窗口居中显示 VS2010

MFC 窗口居中显示  VS2010 (2011-09-11 19:52:05) 转载▼ 标签: 窗口居中显示 it 分类: MFC MFC窗口居中显示   VS2010   工程名为:MFC22_6 目的:点击居中按钮,窗口将在文档的中央显示思路:使窗口居中显示可以调用CWnd::CenterWindow函数.void CenterWindow(CWnd* pAlternateOwner=NULL):步骤: 1.   用创建一个单文档应用程序 2.   添加一个对话框资源//(类视图 右键—添