Android中如何指定SnackBar在屏幕的位置及小问题解决

所属分类: 软件编程 / Android 阅读数: 31
收藏 0 赞 0 分享

Android指定SnackBar在屏幕的位置

Snackbar 常以一个小的弹出框的形式,出现在手机屏幕下方或者桌面左下方,并且是在屏幕所有层的最上方。如果要指定它在屏幕出现的位置,可以把SnackBar放置在android.support.design.widget.CoordinatorLayout内。

在RelativeLayout里添加CoordinatorLayout如下:

<android.support.design.widget.CoordinatorLayout
 android:layout_width="match_parent"
 android:layout_height="200dp"
 android:id="@+id/myCoordinatorLayout"
 android:layout_alignParentTop="true"
 android:layout_alignParentLeft="true"
 android:layout_alignParentStart="true">
</android.support.design.widget.CoordinatorLayout>

调用Snackbar.make()把CoordinatorLayout作为第一个参数,如下:

final View viewPos = findViewById(R.id.myCoordinatorLayout); 
Snackbar.make(viewPos, R.string.snackbar_text, Snackbar.LENGTH_LONG)
       .setAction(R.string.snackbar_action_undo, showListener)
       .show();

可以通过改变CoordinatorLayout的位置来改变Snackbar的位置,如设置android:paddingBottom="16dp"。

Snackbar位置显示的一点小问题

compile 'com.android.support:design:23.4.0'

Android Studio 新建项目会默认有个展示Snackbar的方法,一直没用。前两天某微信公众号看到
http://www.jianshu.com/p/996dc15d21be 这个文章。写得很好,很全面,基本功能,样式定制都有写到。

其中有处写到自定义显示位置的,感觉很有必要,因为这个和Toast不一样,Toast会显示在软键盘上,而这个会被软键盘挡住。

ViewGroup.LayoutParams vl = v.getLayoutParams();
        CoordinatorLayout.LayoutParams cl = new CoordinatorLayout.LayoutParams(vl.width,vl.height);               
        cl.gravity = Gravity.CENTER;//设置显示位置居中
        v.setLayoutParams(cl);

但是当将位置设置为 

Gravity.TOP

设置偏移距离却无法生效

Rect frame = new Rect();
view.getWindowVisibleDisplayFrame(frame);
l.topMargin =frame.top;

原来是有的View的parent是继承的 FrameLayout这点得注意,需要

FrameLayout.LayoutParams l = (FrameLayout.LayoutParams) v.getLayoutParams();

当然自己写显示在上边很麻烦的,还要处理显示及隐藏动画

在Snackbar.Java的  animateViewIn() 和  animateViewout() 里都有规定

Github上有个很不错的  https://github.com/AndreiD/TSnackBar

是照着系统上的来做的,然后又增加不少小功能。先记一下,如果项目用到就把这个下载来改改

在  design_layout_snackbar.xml  里面有句

android:layout_gravity="bottom"

这个一定要记得改成  top

这样就能在上面显示了。

然后就是相应的动画  R.anim.design_snackbar_in  和  R.anim.design_snackbar_out

不过这两个都是在

Build.VERSION.SDK_INT <Build.VERSION_CODES.ICE_CREAM_SANDWICH//(14)

时调用的,所以可以删掉,不用改

刚好看到系统的final void showView()方法 public void onDismiss(View view)有一行

view.setVisibility(View.GONE);

但是在Tsnackbar里把这句删掉了,好吧看来得注意一下还有没别的大区别.

总结:如果长期显示在顶部可以用Github的项目,否则用design库就行

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

更多精彩内容其他人还在看

Android异常 java.lang.IllegalStateException解决方法

这篇文章主要介绍了Android异常 java.lang.IllegalStateException解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中Split()字符串分割特殊用法案例详解

本文通过案例的形式给大家详细介绍了android中split()字符串分割特殊用法的知识,非常不错具有参考借鉴价值,感兴趣的朋友参考下
收藏 0 赞 0 分享

Android仿新浪微博启动界面或登陆界面(1)

这篇文章主要为大家详细介绍了Android仿新浪微博启动界面或登陆界面的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android仿新浪微博oauth2.0授权界面实现代码(2)

这篇文章主要为大家详细介绍了Android仿新浪微博oauth2.0授权界面实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android开发中使用sqlite实现新闻收藏和取消收藏的功能

本篇文章主要介绍了sqlite实现新闻收藏和取消收藏功能,主要涉及到oracle数据库方面的内容,对于Android开发sqlite实现收藏和取消功能感兴趣的朋友可以参考下本文
收藏 0 赞 0 分享

Android仿新浪微博分页管理界面(3)

这篇文章主要为大家详细介绍了Android仿新浪微博分页管理界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android UI自定义ListView实现下拉刷新和加载更多效果

这篇文章主要介绍了Android UI自定义ListView实现下拉刷新和加载更多效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android—基于微信开放平台v3SDK开发(微信支付填坑)

这篇文章主要介绍了Android—基于微信开放平台v3SDK开发(微信支付填坑),具有一定的参考价值,有需要的可以了解一下。
收藏 0 赞 0 分享

Android仿新浪微博自定义ListView下拉刷新(4)

这篇文章主要为大家详细介绍了Android仿新浪微博自定义ListView下拉刷新,重点介绍了Adapter的详细代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android控件之使用ListView实现时间轴效果

这篇文章主要介绍了Android基础控件之使用ListView实现时间轴效果的相关资料,本文是以查看物流信息为例,给大家介绍了listview时间轴的实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多