snackbar

2020-12-21  本文已影响0人  crossroads

前言

本身想用snackbar实现类似dialog或者popupwindow的方式,使布局不侵入。但是发现如果要控制位置的话,必须去改activity布局,因此只得放弃。但是用法还是在这里存一下,也许哪天就用到啦

用法(包含自定义样式)

 public static void showSnackBar(@NonNull View view, @NonNull String msg, boolean autoDismiss, String action, int bottomMargin, final ISnackBarClickEvent iSnackBarClickEvent) {
        int duringTime;
        if (autoDismiss) {
            duringTime = Snackbar.LENGTH_LONG;
        } else {
            duringTime = Snackbar.LENGTH_INDEFINITE;
        }
        Snackbar snackbar;
        snackbar = Snackbar.make(view, msg, duringTime);
        if (!TextUtils.isEmpty(action)) {
            snackbar.setAction(action, new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    iSnackBarClickEvent.clickEvent();
                }
            });
        }
        View snackBarView = snackbar.getView();
        snackBarView.setBackgroundResource(R.drawable.trtc_live_20corner_blue_bg);
        snackbar.setActionTextColor(ContextCompat.getColor(view.getContext(), R.color.white));

        TextView textView = (TextView) snackBarView.findViewById(R.id.snackbar_text);
        Drawable drawable = ContextCompat.getDrawable(view.getContext(), R.drawable.trtc_net_icon);
        drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
        textView.setCompoundDrawables(drawable, null, null, null);
        textView.setCompoundDrawablePadding(20);

        Button actionView = snackBarView.findViewById(R.id.snackbar_action);
        actionView.setText(action);
        actionView.setTextColor(ContextCompat.getColor(view.getContext(), R.color.white));
        actionView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);

        snackbar.show();
    }

    public interface ISnackBarClickEvent {
        void clickEvent();
    }

snackbar的xml布局

其实上边的控制就是对snackbar布局的更改,我用的是material-1.2.1的,这里是官方布局

<view
    xmlns:android="http://schemas.android.com/apk/res/android"
    class="com.google.android.material.snackbar.SnackbarContentLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">

  <TextView
      android:id="@+id/snackbar_text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:layout_gravity="center_vertical|left|start"
      android:paddingTop="@dimen/design_snackbar_padding_vertical"
      android:paddingBottom="@dimen/design_snackbar_padding_vertical"
      android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
      android:paddingRight="@dimen/design_snackbar_padding_horizontal"
      android:ellipsize="end"
      android:maxLines="@integer/design_snackbar_text_max_lines"
      android:textAlignment="viewStart"
      android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"/>

  <Button
      android:id="@+id/snackbar_action"
      style="?attr/borderlessButtonStyle"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginStart="@dimen/design_snackbar_extra_spacing_horizontal"
      android:layout_marginLeft="@dimen/design_snackbar_extra_spacing_horizontal"
      android:layout_gravity="center_vertical|right|end"
      android:minWidth="48dp"
      android:textColor="?attr/colorAccent"
      android:visibility="gone"/>
</view>
上一篇下一篇

猜你喜欢

热点阅读