snackbar

作者: crossroads | 来源:发表于2020-12-21 10:56 被阅读0次

    前言

    本身想用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>
    

    相关文章

      网友评论

          本文标题:snackbar

          本文链接:https://www.haomeiwen.com/subject/zacrnktx.html