Snackbar位置显示的一点小问题
compile'com.android.support:design:23.4.0'
Android Studio 新建项目会默认有个展示Snackbar的方法,一直没用。前两天某微信公众号看到
http://www.jianshu.com/p/996dc15d21be这个文章。写得很好,很全面,基本功能,样式定制都有写到。
其中有处写到自定义显示位置的,感觉很有必要,因为这个和Toast不一样,Toast会显示在软键盘上,而这个会被软键盘挡住。
ViewGroup.LayoutParamsvl=v.getLayoutParams();CoordinatorLayout.LayoutParamscl=newCoordinatorLayout.LayoutParams(vl.width,vl.height);cl.gravity=Gravity.CENTER;//设置显示位置居中v.setLayoutParams(cl);
但是当将位置设置为
Gravity.TOP
设置偏移距离却无法生效
Rectframe=newRect();view.getWindowVisibleDisplayFrame(frame);l.topMargin=frame.top;
原来是有的View的parent是继承的 FrameLayout这点得注意,需要
FrameLayout.LayoutParamsl=(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库就行
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。