【 Android 】SnackBar 使用讲解
2017-09-25 本文已影响124人
Tyhoo_Wu
在 Android L 的时候,Google 引入了 SnackBar 这一全新控件,它的作用说简单了和 Toast 一样,并且导入安卓原生库之后是向下兼容的。
网上一搜例子一大堆,但是对于自定义 SnackBar ,我觉得需要说一下。(如果没有 View,在类里面定义一个全局的 View 即可)
示例 GIF:

代码实现:
SnackBar 跟 Toast 一样也可以设置显示的时间长度:
Snackbar.LENGTH_SHORT // 短时间停留
Snackbar.LENGTH_LONG // 长时间停留
Snackbar.LENGTH_INDEFINITE // 永久停留
文字 SnackBar(类似于 Toast)
Snackbar.make(view, "这里可以是一个标题或一段文字", Snackbar.LENGTH_LONG).show();
文字 + 按钮 SnackBar
Snackbar.make(view, "这里可以是一个标题或一段文字", Snackbar.LENGTH_INDEFINITE)
.setAction("按钮", new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "你点击了 按钮", Toast.LENGTH_SHORT).show();
}
}).show();
自定义 SnackBar(重点!)
首先自定义布局:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/black">
<RelativeLayout
android:id="@+id/rl_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp">
<ImageView
android:id="@+id/iv_snack_bar_icon"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginRight="16dp"
android:src="@mipmap/ic_launcher_round" />
<TextView
android:id="@+id/tv_snack_bar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/iv_snack_bar_close"
android:layout_toRightOf="@+id/iv_snack_bar_icon"
android:text="这里可以是一个标题或一段文字"
android:textColor="@android:color/white"
android:textSize="13sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/iv_snack_bar_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginLeft="16dp"
android:src="@drawable/ic_close_white_24dp" />
</RelativeLayout>
<TextView
android:id="@+id/tv_snack_bar_notify"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/rl_top"
android:layout_marginBottom="10dp"
android:layout_marginLeft="35dp"
android:layout_marginTop="10dp"
android:text="这里也可以是一个标题或一段文字"
android:textColor="#ffbc4e"
android:textSize="13sp" />
</RelativeLayout>
在触发显示 SnackBar 的地方:
final Snackbar snackbar = Snackbar.make(view, "", Snackbar.LENGTH_INDEFINITE);
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
View child = LayoutInflater.from(view.getContext()).inflate(R.layout.layout_snackbar, null);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER_VERTICAL;
layout.addView(child, -1, params);
layout.setBackgroundColor(Color.BLACK);
snackbar.show();
ImageView imageView = layout.findViewById(R.id.iv_snack_bar_close);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
snackbar.dismiss();
}
});
是不是感觉超级简单,无任何阻碍,代码也很清晰。
以上就是 SnackBar 使用讲解,比网上其他的例子实现起来要简单地很多。