【问题标题】:SnackBar goes behind NavigationBar after using FLAG_NO_LIMIT使用 FLAG_NO_LIMIT 后,SnackBar 落后于 NavigationBar
【发布时间】:2018-04-29 22:51:53
【问题描述】:

我正在尝试像这样专注于设计:

为此,我在onCreate里面添加了

getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

现在布局得到了扩展,但它以某种方式将我的小吃栏隐藏在导航栏后面,这不是所需的结果,因为它应该是上面的。这是我的屏幕截图:

我可能走错了路,如果你纠正我会非常有帮助。

【问题讨论】:

  • 查看 rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content); Snackbar 小吃吧 = Snackbar.make(rootView, message, 2000); @Droidwala,查看 sView =snackbar.getView(); TextView textView = (TextView) sView.findViewById(android.support.design.R.id.snackbar_text);

标签: android android-snackbar


【解决方案1】:

来自here:为您的小吃店添加边距,48dp 应该足够了。

public static void displaySnackBarWithBottomMargin(Snackbar snackbar, int sideMargin, int marginBottom) {
    final View snackBarView = snackbar.getView();
    final CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) snackBarView.getLayoutParams();

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

    snackBarView.setLayoutParams(params);
    snackbar.show();
}

【讨论】:

  • 小心 FrameLayout cast Exception
  • 我碰到了,呵呵
【解决方案2】:

不要使用“rootView”实例来创建 Snackbar,而是使用 getView() 如下所示

Snackbar snackbar = Snackbar.make(getView(), "Your Message", Snackbar.LENGTH_LONG);
snackbar.show();

【讨论】:

    【解决方案3】:

    我通过使用这种技术解决了这个问题:

    1- 在我的布局中添加一个视图

    2-设置Snackbar setAnchorView

    在您的 XML 中

    <View
            android:id="@+id/snackBarAnchor"
            android:layout_width="0.1dp"
            android:layout_height="0.1dp"
            android:layout_alignParentBottom="true" />
    

    在您的代码中

              snackbar.setAnchorView(R.id.snackBarAnchor)
    

    【讨论】:

      【解决方案4】:

      无需对 LayoutParams 进行猜测(这会使您的 Snackbar 在不同屏幕上处于奇怪的位置)

      只需确保布局的根是CoordinatorLayout。确保 coordinator 也是给小吃店的 View(不要使用 v.getRootView(),因为这可能是另一个视图)

      您可能需要为协调器提供一个 id 并将其作为视图传递:

      new Snackbar.make(findViewById(R.id.coordinator), ...).show()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-23
        • 1970-01-01
        • 2017-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多