Add margins to Snackbar view

前端 未结 17 1450
时光取名叫无心
时光取名叫无心 2020-12-06 16:20

I\'m updating my current app to use snackbars, in the Google spec they show various ways of using them http://www.google.com/design/spec/components/snackbars-toasts.html#sna

相关标签:
17条回答
  • 2020-12-06 16:50

    I just add my solution because the @BamsMamx solution's didn't work I need to add getChildAt(0)

      public static void displaySnackBarWithBottomMargin(BaseActivity activity, View main) {
       Snackbar snackbar = Snackbar.make(main, R.string.register_contacts_snackbar, Snackbar.LENGTH_SHORT);
        final FrameLayout snackBarView = (FrameLayout) snackbar.getView();
    
        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) snackBarView.getChildAt(0).getLayoutParams();
        params.setMargins(params.leftMargin,
                    params.topMargin,
                    params.rightMargin,
                    params.bottomMargin + 100;
        snackBarView.getChildAt(0).setLayoutParams(params);
        snackbar.show();
    }
    
    0 讨论(0)
  • 2020-12-06 16:54

    Just add it in your theme:

    <item name="snackbarStyle">@style/SnackbarMessageStyle</item>
    

    And add the style:

    <style name="SnackbarMessageStyle" parent="@style/Widget.MaterialComponents.Snackbar">
        <item name="android:layout_margin">@dimen/snackbarMessageMargin</item>
    </style>
    
    0 讨论(0)
  • 2020-12-06 16:55

    For kotlin developers, just some handy extension that I use,

    inline fun View.snack(message:String, left:Int = 10, top:Int = 10, right:Int = 10, bottom:Int = 10, duration:Int = Snackbar.LENGTH_SHORT){
     Snackbar.make(this, message, duration).apply {
    
         val params = CoordinatorLayout.LayoutParams(CoordinatorLayout.LayoutParams.MATCH_PARENT, CoordinatorLayout.LayoutParams.WRAP_CONTENT )
         params.setMargins(left, top, right, bottom)
         params.gravity = Gravity.BOTTOM
         params.anchorGravity = Gravity.BOTTOM
    
         view.layoutParams = params
         show()
     }
    }
    
    
    inline fun View.longSnack(message:String){
       snack(message, duration = Snackbar.LENGTH_LONG)
    }
    
    0 讨论(0)
  • 2020-12-06 16:55

    This works for me
    container is parent tag which is CoordinatorLayout
    R.id.bottom_bar is a view on which above snackbar should be shown

        Snackbar.make(container, getString(R.string.copied), Snackbar.LENGTH_LONG).apply {
            val params = view.layoutParams as CoordinatorLayout.LayoutParams
            params.anchorId = R.id.bottom_bar
            params.anchorGravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
            params.gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
            view.layoutParams = params
            show()
        }
    

    if yout want additional margin then simply add padding to R.id.bottom_bar. This only works

    0 讨论(0)
  • 2020-12-06 16:56

    Try this:

    Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "message", Snackbar.LENGTH_LONG);
    
    View snackBarView = snackbar.getView();
                LayoutParams params = new LayoutParams(
    LayoutParams.WRAP_CONTENT,      
    LayoutParams.WRAP_CONTENT);
    
    params.setMargins(left, top, right, bottom);
    
    snackBarView.setLayoutParams(params);
    
    snackbar.show();
    
    0 讨论(0)
  • 2020-12-06 16:57

    Personally, none of the proposed methods has come up (Android 9)
    I decided in the following way.
    I added an invisible object (anchor_view) to the layout and made:

    snackbar.anchorView = anchor_view
    
    0 讨论(0)
提交回复
热议问题