我可以向自定义快餐栏添加边距(扩展 BaseTransientBottomBar)吗?

Posted

技术标签:

【中文标题】我可以向自定义快餐栏添加边距(扩展 BaseTransientBottomBar)吗?【英文标题】:Can I add margins to a custom snackbar (extends BaseTransientBottomBar)? 【发布时间】:2020-09-02 13:00:21 【问题描述】:

我有一堂课:

public final class MySnackbar<T>
    extends BaseTransientBottomBar<AccountSnackbar<T>>

我尝试通过调用ctor来为MySnackbar添加边距:

  private void setSnackbarContainerMargins(Context context, View content) 
    MarginLayoutParams layoutParams = (MarginLayoutParams) getView().getLayoutParams();
    int horizontalMargin =

    layoutParams.leftMargin = horizontalMargin;
    layoutParams.rightMargin = horizontalMargin;
    layoutParams.bottomMargin =

    parent.setLayoutParams(layoutParams);
  

在运行时,我看到边距保持不变。

有没有其他方法可以为我的自定义快餐栏添加额外的边距?

【问题讨论】:

检查这个answer。您可以使用自定义样式来做到这一点,但有一些限制。 为什么这些不起作用? ***.com/a/44295639/311130 或 ***.com/a/33969220/311130 【参考方案1】:

你可以试试这个,CoordinatorLayout 是你的 snapbar 父布局:

int sideMargin = 12, marginBottom = 12;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 
    sideMargin = 24;
    marginBottom = 24;

MySnackbar snackbar = Snackbar.make(findViewById(R.id.addCoordinatorLayout), R.string.notification, Snackbar.LENGTH_SHORT);
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);
snackBarView.setBackground(getDrawable(R.drawable.round_corner));
snackbar.show();

【讨论】:

以上是关于我可以向自定义快餐栏添加边距(扩展 BaseTransientBottomBar)吗?的主要内容,如果未能解决你的问题,请参考以下文章

向自定义 React 组件添加额外的类名

向自定义视图中的 UIButton 添加操作

在 Eureka 中向自定义规则添加规则

向自定义 UITableViewCell 输入数据

向自定义正则表达式添加动态错误消息

使用 UIBezierPath 将半径设置为某些角并向自定义 UIButton 添加阴影