Android中如何指定SnackBar在屏幕的位置及小问题解决
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自定义控件:imageview重写onMeasure方法实现图片按指定比例显示,拉伸永不变形,解决屏幕适配问题
- Android:解决打开activity之后 屏幕初始位置不是顶部问题
- android开发如何更好的解决适配不同屏幕大小移动设备的问题
- "没有可用于当前位置的源代码"这个问题如何解决?
- Android 自定义全局标题栏 解决输入法遮住屏幕问题
- 如何通过微调整功能,解决打印位置上下偏移的问题?(转)
- 如何在ubuntu10.04下载android4.0的源码(并解决以往无法下载android源码的问题)
- 如何解决Android WebView出现的乱码问题
- 不惧分裂 Google解决Android屏幕尺寸问题
- 如何解决 "Powered by ECShop"每次显示的位置都不同的问题
- 如何解决放到android /system/app 下的应用程序无限重启弹出“异常终止”的问题
- 如何解决Windows 8开始屏幕上桌面磁贴消失的问题
- 如何解决安装Ubuntu 12.04后屏幕闪烁的问题
- 如何解决VS.NET中应用程序编译完后改变引用位置的问题
- Android中如何解决输入法键盘和activity页面遮挡的问题
- 20121027 如何解决在android平台上apk的覆盖安装问题
- android 解决 addView()操作之后,之前的控件位置重置的问题
- 如何解决: emulator-5554 disconnected! Cancelling 'com.example.android.snake.Snake activity launch'!的问题
- 如何解决Android中输入法挡住输入框的问题
- Android的一段常用动画效果代码(如何让点击的图片控件加速飞入到指定位置)