Android中如何指定SnackBar在屏幕的位置及小问题解决
作者:码经笔记 发布时间:2023-08-07 07:56:19
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库就行
来源:https://majing.io/posts/10000009761166
猜你喜欢
- 本文介绍了Android 删除所有build编译文件,翻译磁盘空间,分享给大家,也给自己留个笔记,具体如下: public static v
- 记录窗口上次关闭的位置和大小namespace PDSafe.Base{ public class Se
- C# 中同样支持多维数组(也可称为矩形数组),它可以是二维的,也可以是三维的,多维数组中的数据以类似表格(行、列)的形式存储,因此也被称为矩
- WebView2简介概述WebView2 全称 Microsoft Edge WebView2 控件,此控件的作用是在本机桌面应用中嵌入we
- 本文实例为大家分享了java金额数字转中文工具类的具体代码,供大家参考,具体内容如下java金额数字转中文工具类ConvertNum.jav
- 本文介绍了Flutter 通过Clipper实现各种自定义形状的示例代码,分享给大家,具体如下:ClipOval 圆形裁剪ClipOval(
- 配置文件请看上篇Java实现redis https://www.jb51.net/article/190922.htm下面测试redis的集
- 建立Android项目,如果会的话特别简单,不会的话让自己去琢磨也需要一定的时间!小编之后将自己学习Android的经验给大家分享出来!1、
- 一、线程间的共享1.1 ynchronized内置锁用处Java支持多个线程同时访问一个对象或者对象的成员变量关键字synchronized
- 前言最常用的对字符串操作的类有三个,分别是String,StringBuilder,StringBuffer,下面将会详细的说说这三个类..
- 1、 namenode启动在本系列文章三中分析了hadoop的启动文件,其中提到了namenode启动的时候调用的类为org.apache.
- 本文实例为大家分享了Unity3D实现攻击范围检测的具体代码,供大家参考,具体内容如下一、扇形攻击范围检测using UnityEngine
- 前言在Spring Boot的自动配置中经常看到@ConditionalOnProperty注解的使用,本篇文章带大家来了解一下该注解的功能
- 1.依赖maven依赖如下,需要说明的是,spring-boot-starter-data-redis里默认是使用lettuce作为redi
- 悬浮窗在安卓中实现起来还是比较容易的,这几天在网上温习了相关资料,运行在我安卓6.0手机上才发现,原来在6.0手机上不是行的。第一反应肯定是
- 前言:需求是这样的,在与第三方对接过程中,对方提供了token进行时效性验证,过一段时间token就会失效.后台有定时任务在获取,但是偶尔会
- 简介现在的app功能越来越强大,除了基本的图文之外,还需要各种各样的其他的功能,比如视频,和直播。直播可能会比较复杂,因为涉及到了拉流和推流
- 一、开源项目 Javascript .NET地址: http://javascriptdotnet.codeplex.com/ 它是Goog
- 在使用java项目时,如果没有详细的管理和辅助流程,就会像程序失去了系统的调配一样。在java中有一种专门管理项目的工具,叫做maven,除
- 前言本文主要给大家介绍了关于Spring Boot应用极速部署脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧