Android 进阶之路Android开发程序员

【 Android 】SnackBar 使用讲解

2017-09-25  本文已影响124人  Tyhoo_Wu

在 Android L 的时候,Google 引入了 SnackBar 这一全新控件,它的作用说简单了和 Toast 一样,并且导入安卓原生库之后是向下兼容的。

网上一搜例子一大堆,但是对于自定义 SnackBar ,我觉得需要说一下。(如果没有 View,在类里面定义一个全局的 View 即可)

示例 GIF:


snackbar.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 使用讲解,比网上其他的例子实现起来要简单地很多。

上一篇 下一篇

猜你喜欢

热点阅读