【问题标题】:Cannot set SnackBar bottom margin无法设置 SnackBar 下边距
【发布时间】:2019-10-05 13:05:56
【问题描述】:

按照this 线程中给出的提示,我将小吃店的底部边距设置为 ca。 55 dp 以使其高于 FAB。

代码是 - 与另一个问题一样:

Snackbar snackbar = Snackbar.make(constraintLayoutContent, msg, Snackbar.LENGTH_LONG);
snackbar.setAction(action, v -> snackbar.dismiss());

View snackBarView = snackbar.getView();

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) snackBarView.getLayoutParams();

params.setMargins(params.leftMargin, 
   params.topMargin, 
   params.rightMargin,
   params.bottomMargin + 500);

//params.gravity = Gravity.TOP;

snackBarView.setLayoutParams(params);

snackbar.show();

我面临的问题是,如果小吃栏位于屏幕底部 (params.gravity = Gravity.BOTTOM;),则不应用底部边距;但是,如果将快餐栏放置在屏幕顶部 (params.gravity = Gravity.TOP; params.topMargin = 500;),则会正确应用上边距。

问题的两张截图:

top margin correctly applied

bottom margin not applied

感谢您的帮助。

编辑:

以下是我的布局 xml 文件。不确定这是否有帮助,但我们来了。

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinatorLayoutContent"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/constraintLayoutContent">

        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

【问题讨论】:

  • 我测试了你的代码,没有问题!
  • 嗯,我不知道为什么它不适合我
  • 发布您的 xml 布局可能会有所帮助!
  • 这是一种奇怪的行为。我不知道为什么保证金底部不起作用。我不得不使用 Denny Weinberg 方法,或者我在底部导航栏下找到了小吃店。

标签: java android android-snackbar snackbar


【解决方案1】:

添加 CoordinatorLayout 或 Frame Layout 然后设置边距对我不起作用

要解决这个问题,请使用 Drawable Background,其中使用 item 设置 Margin 和 shape 设置所需的 Padding

container_snackbar.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--    Set Margin Here -->
    <item
        android:left="20dp"
        android:right="20dp"
        android:bottom="10dp"
        android:top="10dp">

        <!-- Insert your shape here: -->
        <shape android:shape="rectangle"  >
            <solid android:color="#FE4C4C" />

            <!-- Padding for inner text-->
            <padding android:left="25dp" android:right="10dp" android:bottom="10dp" android:top="10dp" />
            <corners android:radius="5dp" />

        </shape>
    </item>
</layer-list>

然后从Activity设置那个Drawable

MainActivity.java

Snackbar snack = Snackbar
                 .make(activity,"Hello World ?",Snackbar.LENGTH_INDEFINITE);
        snack.getView()
        .setBackground(ContextCompat.getDrawable(getApplicationContext(),R.drawable.contianer_snackbar));
        snack.show();

结果

【讨论】:

    【解决方案2】:

    M.Usman version 为我工作:

    val snackBarView = snackbar.view
    snackBarView.translationY = (-getNavigationBarSize(context)).toFloat()
    snackbar.show()
    

    @JvmStatic
    fun getNavigationBarSize(context: Context): Int {
        val resources = context.resources
        val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android")
        return if (resourceId > 0) {
            resources.getDimensionPixelSize(resourceId)
        } else getDensity(context).toInt() * 56
    }
    

    【讨论】:

    • 这是一种奇怪的行为。我不知道为什么保证金底部不起作用。我不得不使用这种方法。或者我在底部导航栏下有小吃栏。
    【解决方案3】:

    我面临着类似的问题。看起来边距底部仅在您将 CoordinatorLayoutView 传递给 Snackbar.make() 时才有效。 我认为它与baseTransientBottomBar 有关,并且在您通过 CoordinatorLayoutView 后,它的大部分行为(例如滑动关闭)都将可用。也许可以覆盖baseTransientBottomBar 以应用margin-bottom。

    【讨论】:

      猜你喜欢
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2018-05-08
      • 2019-06-01
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多