Android SnackBar
来源:互联网 发布:恶搞新闻联播软件 编辑:程序博客网 时间:2024/05/16 19:49
SnackBar是一个新控件,它的作用是类似Toast的。如果需要一个弹出消息提示,可以考虑用SnackBar替换Toast。
1.SnackBar有一些交互动画,那么父布局最好是android.support.design.widget.CoordinatorLayout
<?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:id="@+id/mcoor" android:layout_height="match_parent" tools:context="com.yidaitest.myapplication.MainActivity"> <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="16dp" android:id="@+id/floating" /></android.support.design.widget.CoordinatorLayout>
2.创建SnackBar实例,调用show,因为SnackBar创建次数过多,会造成内存增加
public class MainActivity extends AppCompatActivity { private FloatingActionButton mfloat; private CoordinatorLayout mCoorlayout; private int SnackCount = 0; //创建SnackBar的次数 private int clearSnackCount = 5; // 当创建SnackBar的次数超过5次就调用gc /** * 创建SnackBar次数,每次创建SnackBar的时候调用一次 */ public void countSnackBarCreate() { SnackCount++; if(SnackCount >= clearSnackCount) { System.gc(); SnackCount = 0; } } /** * 改变snackbar的背景和文字颜色 * @param snackbar * @param color */ public void setSnackBackground(Snackbar snackbar,int color) { View view = snackbar.getView(); ((TextView)view.findViewById(android.support.design.R.id.snackbar_text)).setTextColor(color); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mfloat = (FloatingActionButton) this.findViewById(R.id.floating); mCoorlayout = (CoordinatorLayout) this.findViewById(R.id.mcoor); mfloat.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Snackbar snackbar = Snackbar.make(mCoorlayout, "Snackbar", 0).setAction("snackclick", new View.OnClickListener() { @Override public void onClick(View v) { } }); // 改变背景颜色 setSnackBackground(snackbar,Color.BLUE); snackbar.show(); // 如果创建SnackBar对象超过5次,就手动回收 countSnackBarCreate(); } }); }}
普通SnackBar效果图
3.自定义SnackBar
本来是不应该自定SnackBar,因为SnackBar作用类似于Toast,专注轻量级的交互,何必整一个复杂的布局呢。但是如果真的有需求,那么也可以做到。如果想要复杂的交互,应该用Dialog,不应该用SnackBar。
那么什么是复杂的交互呢?响应的事件超过2个以上,就不要用SnackBar了。
3.1 自定义布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/snackbartextview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="hahahahahah"/></LinearLayout>
3.2 得到snackbarlayout,重新设置params
/** * 自定义snackbar * @param snackBar * @param string */ public void setCustomSnackBar(Snackbar snackBar,String string) { View view = snackBar.getView(); // 得到SnackbarLayout Snackbar.SnackbarLayout snackbarLayout = ( Snackbar.SnackbarLayout )view; View childView = View.inflate(getApplicationContext(),R.layout.snackbar_custom,null); TextView textView = (TextView) childView.findViewById(R.id.snackbartextview); textView.setText(string); // 重新设置控件布局参数params LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER_VERTICAL; // 将自定义布局添加进snackbarLayout snackbarLayout.addView(childView,params); }
效果图
4.一个封装的SnackBarUtil,转载别人的
http://www.jianshu.com/p/cd1e80e64311
0 0
- Android SnackBar
- Android SnackBar
- Android SnackBar
- Snackbar android
- Android SnackBar
- android Snackbar
- Android Snackbar
- Android Snackbar
- Android-SnackBar
- android snackbar 使用
- Android SnackBar学习
- Android Snackbar的使用
- Android Training--SnackBar
- android Snackbar的使用
- Android FloatingActionButton,Snackbar
- Android SnackBar使用方法
- 【Android 基础】SnackBar详解
- 【Android】Snackbar 的使用
- 【问题解决】斐波那契数列
- Select 模型简介
- 2017年完美世界一道笔试题
- Java消除字符串换行、空格方法
- 最终一致性Quorum及其在Zookeeper和Kafka中的演变
- Android SnackBar
- CSS之Position相对定位和绝对定位
- Bootstrap 精华一页纸
- Git问题Everything up-to-date解决
- 使用自定义用户登陆Vagrant box
- Linux下命令行安装weblogic
- 给键盘添加一个tooBar,完成按钮,以及对写一个分类的理解
- Hibernate和Spring data jpa的区别?
- 文章标题 Friends