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
猜你喜欢
- 今天给大家介绍一下SpringBoot中JPA的一些常用操作,例如:增删改查、分页、排序、事务操作等功能。下面先来介绍一下JPA中一些常用的
- 一、广播机制概述通常情况下在学校的每个教室都会装有一个喇叭,这些喇叭是接入到学校广播室的。如果有重要通知,会发送一条广播来告知全校师生。为了
- 一般而言,Android 应用在请求数据时都是以 Get 或 Post 等方式向远程服务器发起请求,那你有没有想过其实我们也可以在 Andr
- Android5.0之后提供了JobService和JobScheduler,用于在稍后的某个时间点或者当满足某个特定的条件时执行一个任务
- 报错翻译: compileSdkVersion android-24”需要JDK 1.8或更高版本编译。报错现象如下图:原因:st
- Android植物大战僵尸小游戏全部内容如下:相关下载:Android植物大战僵尸小游戏具体代码如下所示:package com.examp
- 在使用struts多模块的,找到一些小技巧和经验,与大家分享一下。 关于多module的配置就不说了,只需要用不同的config
- 一、导航栏UINavigationBar1、导航栏的使用在iOS开发中,我们通常会使用导航控制器,导航控制器中封装了一个UINavigati
- tcp客户端示例#include <errno.h> #include <sys/socket.h> #includ
- 最近研究了一下如何在Android上实现CoverFlow效果的控件,其实早在2010年,就有Neil Davies开发并开源出了这个控件,
- 在之前项目中有用到关于获取手机联系人的部分,闲置就想和大家分享一下,话不多说,上代码:java部分:package com.example.
- 首先给出一段代码:public class AslistMethod { public static void main(String[]
- activity A和BA 获取数据的activity B返回数据的activity点击A上的按钮,在A的textview上显示
- 讲这个例子前,咱们先来看一个简单的程序:字符串数组实现数字转字母:#include <stdio.h>#include <
- 背景后台系统需要接入 企业微信登入,满足企业员工快速登入系统流程图简单代码说明自定义一套 springsecurity 认证逻辑主要就是 根
- 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- CSRF介绍CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click atta
- 本文实例为大家分享了Unity实现场景漫游相机的具体代码,供大家参考,具体内容如下前言拿到场景后总喜欢在场景里面玩一段时间,那这个脚本就是你
- AndroidStduio3.0使用gradle将module打包jar文件,首先需要安装gradle。打开控制台输入  
- 一、问题描述今天使用SDK Manager将Android SDK的版本更新到了Android 5.1的版本,eclipse创建androi